劍指offer 二叉搜尋樹的後續遍歷序列

2021-07-15 20:10:53 字數 984 閱讀 7054

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。

此題仍然是對二叉樹遍歷方法的考察,但是與直接對遍歷方法的考察不太一樣,因為這裡的輸入是後續遍歷的序列,所以要判斷該序列是否是某二叉樹的後續遍歷結果,關鍵在於找出根節點,根節點的左子樹和根節點的右子樹,然後繼續對左子樹和右子樹進行判斷,直到全部元素訪問完畢。這裡很顯然是乙個遞迴的過程。由於後續遍歷是先訪問雙親節點,接著訪問左孩子,再訪問右孩子,所以需要對每個節點的左右子樹做進一步的判斷。

public

class

solution

//拷貝左子樹到乙個新的陣列

int lefttree = new

int[i];

//五個引數分別是:

//第乙個是要複製的陣列,第二個是從要複製的陣列的第幾個開始,

//第三個是複製到哪,四個是複製到的陣列第幾個開始,最後乙個是複製長度

system.arraycopy(sequence, 0, lefttree, 0, i);

int j = i;

//判斷後半部分是否有小於根節點的值

for(; j < sequence.length - 1; j++)

//拷貝右子樹到乙個新陣列

int righttree = new

int[sequence.length - i - 1];

system.arraycopy(sequence, i, righttree, 0, sequence.length - i - 1);

boolean verifyleft = true;

if(i > 0)

boolean verifyright = true;

if(i < sequence.length - 1)

return verifyleft && verifyright;

}}

劍指offer 二叉搜尋樹的後續遍歷序列

題目 二叉搜尋樹的後續遍歷序列 這個題目我覺得還是不錯的,自己起初沒有想出來。其實主要是要結合後續遍歷的思路,序列中最後乙個節點一定是根。然後此時,考慮bst的性質,左子樹比根小,右子樹比根大。所以前面的序列也是一部分比根小,一部分比根大。並且這兩個序列都是完全連續的。這題另外乙個總要思路就是對於樹...

劍指Offer之 二叉搜尋樹的後續遍歷序列

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後續遍歷的結果。根據二叉搜尋樹的後續遍歷結果的特點來判斷 序列的最後乙個數是根結點,且前面一部分的數 最後乙個數,根結點之前的後一部分數 最後乙個數。類似這樣的陣列 5,7,6,9,11,10,8 如果滿足上面的條件,然後再對兩部分進行遞迴判斷,否則直...

劍指offer 23 二叉搜尋樹的後續遍歷

程式設計資料獲取 codelab 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。我們先來了解一下什麼是二叉搜尋樹 二叉查詢樹 binarysearchtree 也稱為二叉搜尋樹 有序二叉樹或排序二叉樹是指一棵...