劍指offer 面試題7 重建二叉樹

2021-09-12 07:26:12 字數 1203 閱讀 7179

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出二叉樹並輸出他的根節點。二叉樹的定義如下:

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 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。示例 例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。二叉樹的前序遍歷序列中,第乙個數字總是樹的根節點的值。二叉樹的中序遍歷序列中,根節點的值在序列的中間,左子樹節點的值位於根節點...