劍指 offer 07. 重建二叉樹
遞迴的思想來解決:重複性的問題是:
輸入preorder 和 inorder字串
在inorder字串中找到preorder首字元,把inorder字串劈成2個子字串
以inorder第乙個子符串中的最後乙個字元為邊界,把preorder字串也分成兩個(用子字串長度加上preorder第乙個子串的起始位置即可)
再執行兩次:create(root,pre1,in1);create(root,pre2,in2);
/***官方題解* * definition for a binary tree node.
* struct treenode
* }; */
class
solution
printf(
"i=%d\n
",i);
if(i>in_begin)//
存在左子樹
if(i//
存在右子樹
}treenode* buildtree(vector& preorder, vector&inorder)
};/*
遞迴的思想來解決:
重複性的問題是:
輸入preorder 和 inorder字串
在inorder字串中找到preorder首字元,把inorder字串劈成2個子字串
以inorder第乙個子符串中的最後乙個字元為邊界,把preorder字串也分成兩個(用子字串長度加上preorder第乙個子串的起始位置即可)
再執行兩次:create(root,pre1,in1);create(root,pre2,in2);
*/
前序遍歷的第乙個元素是根,可以把中序遍歷字串劈開,分成左子樹和右子樹,很直觀。
而中序遍歷的第乙個元素,是樹的最左下節點。也可以看做是把前序遍歷字串劈開,分成從根一路左下到最左下節點 和 非這一路的子串。借助棧,處理!
比較難理解!
劍指offer07 重建二叉樹
這是乙個非常高頻的面試題。題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例子 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 思路 題目給出了前序和中序遍歷,我們可以知道前序的...
劍指 Offer 07 重建二叉樹
難度 中等 題目描述 解題思路 這道題之前做過,但是忘得乾乾淨淨了。現在再做一遍撿一撿,說不定哪次面試就出到了呢 總體思想就是遞迴,用雜湊表來儲存對應的中序遍歷的下標,空間換時間,免得每次都要去遍歷找下標。然後每次遞迴的時候,要給對應的左子樹和右子樹在對應陣列裡的下標,左端點大於右端點的時候返回空。...
劍指 Offer 07 重建二叉樹
首先要懂得前序遍歷和中序遍歷,可以寫出兩個陣列,自己手動來重建一下二叉樹,來看看重建二叉樹是怎麼乙個流程。以圖中給出的二叉樹為例,根據前序遍歷的特點,可知前序遍歷的首尾數字是根節點,比如這個時候根節點數值為3,可以在中序遍歷中第2個位置找到數值3,在3左邊的9為3的左子樹,右邊的15,20,7為右子...