面試題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 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如...