1. 程式人生 > 其它 >【劍指Offer 33】js 二叉搜尋樹的後序遍歷

【劍指Offer 33】js 二叉搜尋樹的後序遍歷

技術標籤:資料結構與演算法資料結構二叉樹leetcode演算法javascript

二叉搜尋樹的後序遍歷

題目

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

參考以下這顆二叉搜尋樹:

     5
    / \
   2   6
  / \
 1   3

示例 1:

輸入: [1,6,3,2,5]
輸出: false

示例 2:

輸入: [1,3,2,6,5]
輸出: true

思路

  1. 後序遍歷分成三部分:
    • 最後一個節點為根節點
    • 左子樹的值比根節點小
    • 右子樹的值比根節點大
  2. 先檢驗左子樹,左側比根節點小的值均判定為左子樹
  3. 除最後一個節點和左子樹外的其他值為右子樹,若右子樹有一個比根節點小,則返回false。
  4. 若存在左右子樹,遞迴檢測是否規範。

注意!!!在獲取右子樹序列時需要把根節點排除在外。

程式碼

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; } }

image-20210119122244653

更多資料

整理不易,若對您有幫助,請給個「關注+點贊」,您的支援是我更新的動力