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

2022-01-29 05:35:20 字數 1071 閱讀 2439

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

首先什麼是二叉搜尋樹呢,它是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉排序樹,如下圖所示就是乙個二叉搜尋樹:

這道題目使用遞迴的方法解決,請看下面圖示:

因為序列是後序遍歷序列,所以我們可以判斷出序列的最後乙個元素是該樹的根元素,其左子樹的所有節點值全部小於它,右子數的所有節點值全部大於它。這樣的話我們就可以去找乙個邊界,就是這個序列中第乙個大於12的數,如上圖所示我們找到的是第二位與第三位中間的位置。接下來我們就需要判斷這個位置右邊的數字是否全部大於12,該位置左邊的所有數字是否全部小於12,但凡有乙個不成立,就返回false。都成立的話,就將該位置左右兩側分割成兩個數,再按照上述方法進行判斷,直到序列長度為1或為空。

function verifysquenceofbst(sequence) 

function charge(s)

let root = s[s.length - 1];

let rootindex = s.findindex(x => x > root);

for (let i = 0; i < rootindex; i++)

}if(rootindex!=-1)}}

return charge(s.slice(0, rootindex)) && charge(s.slice(rootindex, s.length - 1));

} return charge(sequence);

}

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

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

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

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同 二叉搜尋樹的性質 根節點大於左子樹所有元素,小於右子數的所有元素。那麼後序遍歷的話,最後乙個元素就為根節點root。那麼本題的思路如下 找到陣列中左右子樹的分界點...

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

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