根據後序陣列重建二叉樹

2021-10-08 10:25:53 字數 1553 閱讀 4568

題目

給定乙個整型陣列arr,已知沒有重複值,判斷arr是否可能是節點值型別為整型的搜尋二叉樹後序遍歷的結果。

高階問題:如果整型陣列中沒有重複值,且已知是一棵二叉搜尋樹的後序遍歷結果,通過arr重構二叉樹。

解答:二叉樹的後序遍歷是先左、再右、最後根的順序,所以,頭節點一定是陣列的最後乙個元素。根據搜尋二叉樹的性質,比後序陣列最後乙個元素值小的陣列會在陣列的左邊,比後序陣列最後乙個元素值大的陣列會在陣列的右邊。例如arr=【2,1,3,6,5,7,4】,比4小的為【2,1,3】(左子樹),比4大的為【6,5,7】(右子樹)。如果不滿足這種情況,那麼一定不是搜尋二叉樹的後序遍歷結果。接下來對這2個劃分的陣列遞迴進行上面的判斷即可。

**:

public

boolean

ispostarray

(int

arr)

return

ispost

(arr,

0, arr.length -1)

;}private

boolean

ispost

(int

arr,

int start,

int end)

int less =-1

;int more = end;

for(

int i =

0; i < end; i++

)else

}//只有左子樹或者只有右子樹的情況

if(less ==-1

|| more == end)

if(less != more -1)

return

ispost

(arr, start, less)

&&ispost

(arr, more, end -1)

;}

高階問題和原問題同理,陣列最後乙個元素為頭節點,左部分陣列是左子樹,右部分陣列是右子樹。

public treenode postarraytobst

(int

arr)

return

posttobst

(arr,

0, arr.length -1)

;}private treenode posttobst

(int

arr,

int start,

int end)

treenode head =

newtreenode

(arr[end]);

int less =-1

;int more = end;

for(

int i =

0; i < end; i++

)else

} head.left =

posttobst

(arr, start, less)

; head.right =

posttobst

(arr, more, end -1)

;return head;

}

根據後序陣列重建搜尋二叉樹

題目 給定乙個整型陣列arr,已知其中沒有重複值,判斷arr是否可能是節點值型別為整型的搜尋二叉樹後序遍歷的結果。public class ispostarray return ispost arr,0,arr.length 1 public static boolean ispost int ar...

根據後序陣列重建搜尋二叉樹

根據後序陣列重建搜尋二叉樹 給定乙個有 n 個不重複整數的陣列 arr,判斷 arr 是否可能是節點值型別為整數的搜尋二叉樹後序遍歷的結果。輸入描述 第一行乙個整數 n,表示陣列的長度。第二行 n 個整數 arr i。輸出描述 如果是搜尋二叉樹後序遍歷的結果則輸出 true 否則輸出 false 示...

根據後序陣列重建搜尋二叉樹

題目 根據後序陣列重建搜尋二叉樹 程式設計師 面試指南 第44題 p148 難度 士 原問題為判斷陣列arr是否可能是搜尋二叉樹後序遍歷的結果,高階問題為通過陣列arr重構二叉樹。原問題的解法 根據二叉樹後序遍歷的順序 左 右 根,頭節點的值一定是陣列的最後乙個元素。然後將除最後乙個元素的陣列一分為...