雖然有時候遞迴的效率不高,但可以化繁為簡使做題的效率大大提高。是程式設計重要的一術要熟練掌握 。
就本題來說,最重要的的包括三個方面:
(1)如何設計遞迴體
(2)遞迴引數如何傳遞
(3)遞迴出口怎眼寫才能使程式簡化
首先,遞迴體的形式決定了能否較為簡單的完成程式,如果細節考慮得過於繁瑣,則即使用了遞迴程式也會寫的很痛苦。因為你把本來該電腦自動完成的任務過多得交給了自己。所以,動筆之前,一定要做好頂層設計。本題設計了兩個unordered_map以迅速確定子樹的範圍,並將其設為全域性以免引數傳遞的麻煩。
其次,傳什麼,怎麼傳?遞迴體設計好後穿什麼就確定了。比較大的實體可以引用的方式傳遞,如過程無修改再加上const。
最後,如果確定遞迴出口。一定要想到最簡的方式,避免過分地處理細節。
/**
* definition for binary tree
* struct treenode
* };
*/class solution
treenode *buildtree(vector&preorder, vector&inorder)
public:
unordered_mappre,in;
};
LintCode 前序遍歷和中序遍歷樹構造二叉樹
根據前序遍歷和中序遍歷樹構造二叉樹.注意事項 你可以假設樹中不存在相同數值的節點 樣例給出中序遍歷 1,2,3 和前序遍歷 2,1,3 返回如下的樹 2 13 中序遍歷 遞迴遍歷當前節點的左子樹 當前節點 右子樹。後序遍歷 遞迴遍歷當前節點的左子樹 右子樹 當前節點。前序遍歷 遞迴遍歷當前節點的當前...
lintcode 前序遍歷和中序遍歷樹構造二叉樹
解題 前序遍歷和中序遍歷樹構造二叉樹 根據前序遍歷和中序遍歷樹構造二叉樹.樣例給出中序遍歷 1,2,3 和前序遍歷 2,1,3 返回如下的樹 2 1 3 注意你可以假設樹中不存在相同數值的節點 解題和上一題很類似的。前序遍歷 根左右 中序遍歷 左根右 definition of treenode p...
前序 中序 後序 非遞迴 實現
1.簡述 void preorder node root 3.中序非遞迴 前序中的root主要作為中間變數使用。這裡的root的意義是下乙個要進棧的結點,初始值為根結點。while root不為空 棧不為空 void inorder node root else 4.後序非遞迴 root表示下乙個要...