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

2021-07-31 10:26:20 字數 999 閱讀 5540

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

二叉搜尋樹的性質:根節點大於左子樹所有元素,小於右子數的所有元素。那麼後序遍歷的話,最後乙個元素就為根節點root。那麼本題的思路如下:

找到陣列中左右子樹的分界點,並判斷右子樹是否全大於根節點,若不是則直接返回false;

之後遞迴判斷左右子樹是否都為二叉搜尋樹,注意左子樹或右子樹不存在的情況;

左右子樹都為二叉搜尋樹返回true,左右子樹有乙個不為二叉搜尋樹則返回false;

#include

#include

using

namespace std;

class

solution

bool

veriftbst

(vector<

int> sequence ,

int start,

int end)

int root = sequence[end]

;//找到左右子樹的分界點

int index = start;

for(index = start ; index < end ; index++)}

//index為右子樹的第乙個元素下標

for(

int i = index ; i < end ; i++)}

bool left =

true;if

(index > start)

bool right =

true;if

(end-

1> index)

return left && right;}}

;int

main()

solution s;

cout

(array);}

return0;

}

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

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

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

題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。分析 後續遍歷要求左子樹大於根大於右子樹,陣列最後乙個元素為根。陣列前半段小於最後乙個元素,為左子樹 後半段大於最後乙個元素,為右子樹,否則返回fals...

劍指Offer(23) 二叉搜尋樹的後序遍歷序列

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。後序遍歷序列最後乙個元素為根節點,前面元素中小於根節點值的為左子樹,大於根節點值的為右子樹,再在左子樹中找到最後乙個元素為左子樹的根節點,繼續分成左右子樹,使用遞...