我有這段代碼從內存中刪除二叉樹,但我不知道如何遞歸調用destroy(<#node* tree#>)
遞歸調用時如何遞歸。我知道當你到達分支的末尾時,遞歸結束,並且結束那個調用並開始在遞歸中上升,但是如果遞歸函數調用保持在它停止的地方,則調用destroy(tree->right)
等待執行,而destroy(tree->left)
完成?堆棧是如何組織的? :刪除一個二叉樹
struct node{
int value;
node* left;
node* right;
};
void destroy(node* tree){
if(tree != NULL){
destroy(tree->left);
destroy(tree->right);
delete tree;
}
}
那麼它看起來像按順序遍歷? (當然,刪除是相反的方法) – Darwin57721 2015-04-04 01:47:54
該函數是後序,它是左,右,這是,這是後序。訪問是預先訂購的,但是直到您真正在節點上進行操作,它並不重要,所以對它進行後續排序:en.wikipedia.org/wiki/Tree_traversal只需檢查wiki文章上的圖片,然後按照代碼 – gia 2015-04-04 02:04:16
你是對的,它是後序。謝謝! – Darwin57721 2015-04-04 02:20:00