輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。
例如,給出
前序遍歷preorder = [3,9,20,15,7]返回如下的二叉樹:中序遍歷inorder = [9,3,15,20,7]
限制:
問題分析
這題和之前講過的一道題重複了,399,從前序與中序遍歷序列構造二叉樹,這兩道題其實是完全一樣的,除了之前講過的3種方法以外,我們今天再來講一種解法,這種思想**於403,驗證二叉搜尋樹的第一種解法。前序遍歷的第乙個元素肯定是根節點,那麼前序遍歷的第乙個節點在中序位置之前的都是根節點的左子節點,之後的都是根節點的右子節點,我們來簡單畫個圖看一下
這裡是隨便舉個例子,我們看到前序遍歷的3肯定是根節點,那麼在中序遍歷中,3前面的都是3左子節點的值,3後面的都是3右子節點的值,
他真正的結構是這樣的
我們來看下**
private
int in =0;
private
int pre =0;
public treenode buildtree
(int
preorder,
int[
] inorder)
private treenode build
(int
preorder,
int[
] inorder,
int stop)
treenode node =
newtreenode
(preorder[pre++])
; node.left =
build
(preorder, inorder, node.val)
; node.right =
build
(preorder, inorder, stop)
;return node;
}
總結關於二叉樹的演算法題其實有很多,這裡講的也只是冰山一角,搞懂了上面和前面的幾個關於二叉樹的題,對二叉樹演算法相關題的理解也會進一步加深
劍指offer 重建二叉樹
重建二叉樹2.cpp 定義控制台應用程式的入口點。題目描述 輸入乙個二叉樹的前序遍歷和中序遍歷,輸出這顆二叉樹 思路 前序遍歷的第乙個節點一定是這個二叉樹的根節點,這個節點將二叉樹分為左右子樹兩個部分,然後進行遞迴求解 include stdafx.h include vector using na...
《劍指offer》重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,則重建二叉樹並返回。輸入乙個樹的前序和中序,例如輸入前序遍歷序列和中序遍歷序列 根據輸入的前序和中序,重建乙個該二叉樹,並返回該樹的根節點。definition for binary...
劍指offer 重建二叉樹
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。definition for binary tree struct treenode class solution if ...