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

2021-10-23 03:20:43 字數 1477 閱讀 2725

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。

preorder為前序遍歷的陣列

inorder為中序遍歷的陣列

class

solution

if(inorder==null||length==0)

treenode root =

buildtree

(preorder,

0,length-

1,inorder,

0,length-1)

;return root;

}public treenode buildtree

(int

preorder,

int preorderstart,

int preorderend,

int[

] inorder,

int inorderstart,

int inorderend)

//若陣列只有兩個元素

int rootval=preorder[preorderstart]

;int rootindex=0;

treenode root =

newtreenode

(rootval);if

(preorderstart == preorderend)

for(

int i=

0;iint leftnodes = rootindex - inorderstart, rightnodes = inorderend - rootindex;

treenode rootleft=

buildtree

( preorder,preorderstart+

1,preorderstart+leftnodes, inorder,inorderstart,rootindex-1)

; treenode rootright=

buildtree

( preorder,preorderend - rightnodes +

1,preorderend, inorder,rootindex+

1,inorderend)

; root.left=rootleft;

root.right=rootright;

return root;

}}

在buildtree方法裡要獲得根節點在inorder陣列裡的下標,這裡可以將**改進,加入乙個map陣列,儲存中序遍歷陣列的值與下標,然後可以簡單通過值返回下標。

map

m=new

hashmap

();for

(int i=

0;i)int rootindex = m.

get(rootval)

;//可以通過節點值,得到節點在陣列位置

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

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

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

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

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

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