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

2021-08-21 00:22:21 字數 1321 閱讀 8372

題目描述

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

樣例

輸入:輸出:true

思路分析

遞迴思路

已知條件:後序序列最後乙個值為root;二叉搜尋樹左子樹值都比root小,右子樹值都比root大。

1、確定root;

2、遍歷序列(除去root結點),找到第乙個大於root的位置,則該位置左邊為左子樹,右邊為右子樹;

3、遍歷左子樹,若發現有大於root的值,則直接返回false;

4、分別判斷左子樹和右子樹是否仍是二叉搜尋樹(即遞迴步驟1、2、3)。

迴圈思路

通過while迴圈 遍歷陣列 

利用len長度的變化 來檢測左右子樹的正確性(即左子樹的節點均小於根節點,右子樹的節點均大於根節點)

**

遞迴方法

public boolean verifysquenceofbst(int  sequence) 

return verifysquenceofbst(sequence, 0, sequence.length-1);

} public boolean verifysquenceofbst(int sequence, int start, int end)

int i = end;

while (i>start && sequence[i-1]>sequence[end])

for (int j = start; j <= i-1; j++)

} return verifysquenceofbst(sequence, start, i-1) && verifysquenceofbst(sequence, i, end-1);

}

結果

迴圈方法

public boolean verifysquenceofbst(int  sequence) 

int len = sequence.length;

int i = 0;

while (--len > 0)

i = 0; //初始化i,i相當於「哨兵」的角色

} return true;

}

結果

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

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

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

題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。解題思路 本題中的樹為二叉搜尋樹,滿足左 根 右 1 求出陣列最後乙個元素,為根節點 2 遍歷,將所有連續小於sequence n 1 的存入vecto...

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

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