劍指offer 學習筆記 二叉搜尋樹的後序遍歷序列

2021-10-03 13:48:09 字數 942 閱讀 5763

面試題33:二叉搜尋樹的後序遍歷序列。輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷結果(只要存在乙個二叉搜尋樹的後序遍歷結果為它即可)。如果是返回true,不是返回false。假設輸入陣列的任意兩個數字都不相同。

後序遍歷得到的序列中,最後乙個數字是樹的根節點的值。陣列中前面的數字可分為兩部分,第一部分是左子樹的值,它們都比根節點小,第二部分是右子樹的值,它們都比根節點大。

我們接下來用同樣的方法確定與陣列每一部分對應的子樹的結構,這是乙個遞迴的過程:

#include

using

namespace std;

bool

verifysequenceofbst

(int

* sequence,

int length)

int root = sequence[length -1]

;int i =0;

for(

; i < length -1;

++i)

}int startofright = i;

// 儲存右子樹的起點

for(

int j = startofright; j < length -1;

++j)

}bool left =

true

;// 必須先初始化為true,若它沒有左子樹,則對於bst是永遠合法的

if(startofright >0)

bool right =

true;if

(startofright <= length -2)

return

(left && right);}

intmain()

;if(verifysequenceofbst

(sequence,7)

)else

}

劍指offer 學習筆記 二叉搜尋樹與雙向鍊錶

面試題36 二叉搜尋樹與雙向鍊錶。輸入一棵二叉搜尋樹,將該二叉樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新節點,只能調整樹中節點指標的指向。二叉樹中,每個節點都有兩個指向子節點的指標,雙向鍊錶中,每個節點也有兩個指標,分別指向前乙個節點和後乙個節點。在二叉搜尋樹中,所有左子節點的值總是小於父節點的...

劍指offer 二叉樹 二叉樹搜尋樹

package bst import j a.util.public class bst if pre.length 0 in.length 0 treenode root new treenode pre 0 for int i 0 i in.length i return root 判斷給定陣列...

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

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。author zy date 2017年10月13日 下午9 34 21 decription 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如...