重建二叉樹

2021-09-12 02:07:24 字數 1977 閱讀 3400

題目內容

結果:部分通過(16%)

/**

* definition for binary tree

* public class treenode

* }*/public

class

solution

/*劃分子樹,然後在對子樹進行遍歷*/

public treenode build

(int

pre,

int startpre,

int endpre,

int[

] in,

int startin,

int endin)

int i=

find

(in,pre[startpre+1]

);if(iendin)

i=find

( in,pre[startpre]);

//確定左節點

t.left =

build

(pre, startpre+

1, i - startin + startpre, in, startin, i-1)

;//確定右節點

t.right =

build

(pre, endpre-

(endin-i)+1

, endpre, in, i +

1, endin)

;return t;}/*

*查詢x在陣列a中的位置

*/public

intfind

(int

a,int x)

}//沒找到返回-1

return-1

;}}

分析:我以為進入build這個方法,給定序列的start都是小於等於end的。然而並不是這樣,可能start>end

結果:通過

既然可能start>end,那麼我就在設定左右節點時,強制要求start<=end才進去

/**

* definition for binary tree

* public class treenode

* }*/public

class

solution

/*劃分子樹,然後在對子樹進行遍歷*/

public treenode build

(int

pre,

int startpre,

int endpre,

int[

] in,

int startin,

int endin)

int i=

find

(in,pre[startpre+1]

);if(iendin)

i=find

( in,pre[startpre]);

/*確定左節點*/

if(startpre+

1<=i - startin + startpre && startin<=i-1)

/*確定右節點*/

if( endpre-

(endin-i)+1

<=endpre && i+

1<=endin)

return t;}/*

*查詢x在陣列a中的位置

*/public

intfind

(int

a,int x)

}//沒找到返回-1

return-1

;}}

子樹序號

先序序列pre

中序序列in

1(當前節點值1)

1,2,3,4,5,6,7

3,2,4,1,6,5,7

2(當前節點值2)

2,3,4

3,2,4

3(當前節點值3)33

此時,我們發現3後面的節點4不在序號為3的子樹中,所以遞迴結束。

二叉樹 重建二叉樹

問題 給定二叉樹的前序遍歷結果和中序遍歷結果,恢復出原二叉樹。假設二叉樹中的元素都不重複,給定二叉樹的前序遍歷序列,二叉樹的中序遍歷序列。看到此題,我首先想到的是尋找根節點,由前序遍歷序列可以看出根節點為1,此時通過中序遍歷可以看出來4,7,2在根節點的左子樹,5,3,8,6在樹的右節點。此時我們可...

二叉樹 重建二叉樹

題目給定兩個陣列,乙個是前序遍歷陣列 preorder 乙個是中序遍歷陣列 inorder 要求輸出還原二叉樹 核心在於我們要理解前序和中序便利的特點 前序遍歷 根節點 左節點 右節點 中序遍歷 左節點 根節點 右節點 所以我們從二叉樹的根節點開始重構 也就是preorder的第乙個值 同時用乙個m...

二叉樹重建

摘自劉汝佳的 演算法競賽入門經典 preorder t t 的根結點 preorder t 的左子樹 preorder t 的右子樹 inorder t inorder t 的左子樹 t 的根結點 inorder t 的右子樹 postorder t postorder t 的左子樹 postord...