輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出二叉樹並輸出他的根節點。二叉樹的定義如下:
public static class binarytreenode
在二叉樹的前序遍歷中,第乙個數字總是樹的根節點。但在中序遍歷中,根節點的值在序列的中間。左子樹的值位於根節點的左側,而右子樹的節點位於根節點值的右邊。所以我們要掃瞄中序遍歷序列,才能找到根節點的值。
如示例中所示,1為整顆樹的根節點,所以1左邊的三個數字都是左子樹的值,右邊都是右子樹的值。同理在247,472中,2為根節點,47都是以2為根節點的左子樹的值,如此遞迴可求。
public binarytreenode reconstruct
(int
preorder,
int[
] inorder)
public
static binarytreenode construct
(int
preorder,
int pstart,
int pend,
int[
] inorder,
int,istart,
int iend)
int value=preorder[pstart]
;int index=istart;
while
(index!=value)
binarytreenode root=
newbinarytreenode()
; root.value=value;
root.left=
construct
(preorder, pstart+
1,pstar+index-istart, inorder, is,index-1)
; root.left=
construct
(preorder, pstar+index-istart+
1,pend, inorder, index+
1,iend)
;return node;
}//中序遍歷遞迴列印
public
static
void
printtree
(binarytreenode node)
}
劍指offer面試題7 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。class solution struct treenode reconstruct int l1,int r1,int l2 pr...
劍指Offer 面試題7 重建二叉樹
題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹,假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,輸入前序遍歷序列和中序遍歷,則重建如圖2.6所示的二叉樹並輸出它的頭節點。分析 前序遍歷 先根,再左,後右 中序遍歷 先左,再根,後右。那麼前序遍歷的第乙個是根,在中序遍歷中找到...
劍指offer 面試題7 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。示例 例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。二叉樹的前序遍歷序列中,第乙個數字總是樹的根節點的值。二叉樹的中序遍歷序列中,根節點的值在序列的中間,左子樹節點的值位於根節點...