二叉搜尋樹的後序遍歷序列
給定一個序列,判斷是不是一個二叉搜尋樹的後序遍歷序列
思路:由後序遍歷的特點我們知道,陣列最後一個數字是根節點,前面的序列是其左右子樹。從頭開始查詢第一個比根節點大的位置,就是右子樹的根節點,它也是左右子樹序列的分界點。應當滿足從分界點往後一直到倒數第二個數值都比最後一個(根節點)大。反覆迭代。
bool VerifyHelper(vector<int> seq, int start, int len)
{
int root = seq[len-1];
int i = 0;
for(; i<len-1; ++i)
if(seq[i] > root)
break; // 找到分界點
int j = i;
for(; j<len-1; ++j)
{
if(seq[j] < root)
return false; // 右子樹比root小,不是後序
}
// 檢查左右子樹
bool left = true;
if(i > 0)
left = VerifyHelper(seq, start, i);
bool right = true;
if(i<len-1)
right = VerifyHelper(seq, i, len-1);
return left&right;
}
bool VerifyPostOrder(vector<int> sequence)
{
if(sequence.size() == 0)
return false;
int len = sequence.size();
return VerifyHelper(sequence, 0 , len);
}
相關文章
- JZ-023-二叉搜尋樹的後序遍歷序列
- [劍指offer] 二叉搜尋樹的後序遍歷序列
- 劍指 Offer 33. 二叉搜尋樹的後序遍歷序列
- 判斷序列是否是二叉搜尋樹的後續遍歷
- The order of a Tree (二叉搜尋樹+先序遍歷)
- 二叉樹--後序遍歷二叉樹
- 從中序與後序遍歷序列構造二叉樹二叉樹
- PAT 1043 Is It a Binary Search Tree (25分) 由前序遍歷得到二叉搜尋樹的後序遍歷
- 根據前序遍歷序列、中序遍歷序列,重建二叉樹二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- 二叉樹的先中後序遍歷二叉樹
- 二叉樹的先,中,後序遍歷二叉樹
- 二叉樹的前中後序遍歷二叉樹
- LeetCode-106-從中序與後序遍歷序列構造二叉樹LeetCode二叉樹
- 二叉樹的前序、中序、後序三種遍歷二叉樹
- 二叉樹中序和後序遍歷表示式二叉樹
- 二叉樹的層序遍歷二叉樹
- 二叉樹的前序,中序,後序遍歷方法總結二叉樹
- 【模板題】- 145. 二叉樹的後序遍歷二叉樹
- 106. 從中序與後序遍歷序列構造二叉樹——Java實現二叉樹Java
- 二叉樹的四種遍歷方法:先序,中序,後序,層序二叉樹
- 二叉樹的後序遍歷post order演算法二叉樹演算法
- python-二叉樹:前、中、後、層序遍歷Python二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- 144. 二叉樹的遍歷「前序、中序、後序」 Golang實現二叉樹Golang
- 演算法 -- 實現二叉樹先序,中序和後序遍歷演算法二叉樹
- 程式碼隨想錄演算法訓練營day14 | leetcode 144. 二叉樹的前序遍歷、145. 二叉樹的後序遍歷、94. 二叉樹的中序遍歷演算法LeetCode二叉樹
- LeeCode-94. 二叉樹的中序遍歷二叉樹
- LeetCode102.二叉樹的層序遍歷LeetCode二叉樹
- 94. 二叉樹的中序遍歷(迭代)二叉樹
- Leetcode——94.二叉樹的中序遍歷LeetCode二叉樹
- LeetCode-105-從前序與中序遍歷序列構造二叉樹LeetCode二叉樹
- LeetCode 105. 從前序與中序遍歷序列構造二叉樹LeetCode二叉樹
- 388,先序遍歷構造二叉樹二叉樹
- 非遞迴先序遍歷二叉樹遞迴二叉樹
- 【樹01】對二叉樹前序/中序/後序遍歷演算法的一些思考二叉樹演算法
- 二分搜尋樹系列之[ 深度優先-層序遍歷 (ergodic) ]Go
- 二分搜尋樹系列之「深度優先-層序遍歷 (ergodic) 」Go