【劍指Offer 33】js 二叉搜尋樹的後序遍歷
阿新 • • 發佈:2021-01-21
技術標籤:資料結構與演算法資料結構二叉樹leetcode演算法javascript
二叉搜尋樹的後序遍歷
題目
輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷結果。如果是則返回 true
,否則返回 false
。假設輸入的陣列的任意兩個數字都互不相同。
參考以下這顆二叉搜尋樹:
5
/ \
2 6
/ \
1 3
示例 1:
輸入: [1,6,3,2,5]
輸出: false
示例 2:
輸入: [1,3,2,6,5]
輸出: true
思路
- 後序遍歷分成三部分:
- 最後一個節點為根節點
- 左子樹的值比根節點小
- 右子樹的值比根節點大
- 先檢驗左子樹,左側比根節點小的值均判定為左子樹
- 除最後一個節點和左子樹外的其他值為右子樹,若右子樹有一個比根節點小,則返回false。
- 若存在左右子樹,遞迴檢測是否規範。
注意!!!在獲取右子樹序列時需要把根節點排除在外。
程式碼
function VerifySquenceOfBST(sequence) {
if (sequence && sequence.length > 0) {
const root = sequence[sequence.length - 1];
for (var i = 0; i < sequence.length - 1; i++) {
if (sequence[ i] > root) {
break;
}
}
for (let j = i; j < sequence.length - 1; j++) {
if (sequence[j] < root) {
return false;
}
}
var left = true;
if (i > 0) {
left = VerifySquenceOfBST(sequence.slice(0, i));
}
var right = true;
if ( i < sequence.length - 1) {
right = VerifySquenceOfBST(sequence.slice(i, sequence.length - 1))
}
return left && right;
}
}
更多資料
整理不易,若對您有幫助,請給個「關注+點贊」,您的支援是我更新的動力