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

2021-10-02 23:14:33 字數 1155 閱讀 1476

/*

題目:輸入一棵二叉樹的前序遍歷和中序遍歷,構建這棵二叉樹

前序遍歷:1,2,4,7,3,5,6,8

中序遍歷:4,7,2,1,5,3,8,6

*//*

在二叉樹的前序遍歷當中,第乙個數字總是二叉樹的根節點,根據這個數字

我們可以在中序遍歷當中找到根節點,在中序遍歷的左邊所有left個數字

都是左子樹,在根節點的右邊所有right個數字全都是右子樹。

在前序遍歷的根節點之後left個數字,就是所有左子樹的節點。

前序遍歷:1,2,4,7,3,5,6,8

中序遍歷:4,7,2,1,5,3,8,6

根據前序遍歷,1是根節點,在中序遍歷中找到1.

中序遍歷1的左邊4,7,2全是左子樹,右邊5,3,8,6全是右子樹

遞迴這個過程就可以重建這棵二叉樹

*/binarytreenode *

construct

(int

*preorder,

int*inorder,

int length)

binarytreenode *constructcore

(int

*startpreorder,

int*endpreorder,

int*startinorder,

int*endinorder

)else

}//在中序遍歷中找到根節點的值

int*rootinorder=startinorder;

while

(rootinorder<=endinorder &&

*rootinorder!=rootvalue)

if(rootinorder==endinorder &&

*rootinorder!=rootvalue)

throw std::

exception

("invalid input");

int leftlength=rootinorder-startinorder;

int*leftpreorderend=startpreorder+leftlength;

if(leftlength>0)

if(leftlengthreturn root;

}

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

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。class solution struct treenode reconstruct int l1,int r1,int l2 pr...

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

題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹,假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,輸入前序遍歷序列和中序遍歷,則重建如圖2.6所示的二叉樹並輸出它的頭節點。分析 前序遍歷 先根,再左,後右 中序遍歷 先左,再根,後右。那麼前序遍歷的第乙個是根,在中序遍歷中找到...

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

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出二叉樹並輸出他的根節點。二叉樹的定義如下 public static class binarytreenode 在二叉樹的前序遍歷中,第乙個數字總...