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

2022-07-29 03:51:10 字數 1063 閱讀 4939

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

思路:這題目有點特殊,主要在於序列為空的時候,不是後序遍歷,返回的是false,但是在遞迴的時候,遞迴基要寫true,因為如果寫false,那麼遞迴的所有結果都是false。

step1:首先找到最後乙個就是根節點;

step2:然後比較左子樹,是否都比root的值小,得到左子樹的位置i - 1,並且儲存左子樹的所有值;

step3:從位置i開始,比較右子樹的值是否都大於root,如果小於則返回false,並且儲存右子樹的所有值;

step4:遞迴的比較左右子樹。

1

class

solution

7int i = 0,j = 0;8

int root = sequence[sequence.size() -1

];9 vectorleftseq,rightseq;

1011

for(i;i < sequence.size() - 1;++i)

15leftseq.push_back(sequence[i]);16}

1718

for(j = i;j < sequence.size() - 1;++j)

22rightseq.push_back(sequence[j]);23}

24bool left = true

;25 left =verifysquenceofbst1(leftseq);

26bool right = true

;27 right =verifysquenceofbst1(rightseq);

28return left &&right;29}

30bool verifysquenceofbst(vectorsequence)

34return

verifysquenceofbst1(sequence);

3536

}37 };

一定要注意32行和第2行的不同。

劍指offer 二叉樹的後序遍歷

思路 對於乙個二叉樹的後序遍歷序列來說,最後乙個數一定是根節點,然後前面的數中,從最開始到第乙個大於根節點的數都是左子樹中的數,而後面到倒數第二個數應該都是大於根節點的,是右子樹,如果後面的數中有小於根節點的,那麼說明這個序列不是二叉搜尋樹的後序遍歷序列。public class judgehoux...

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

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。例如輸返回true 輸入返回false 1,利用二叉搜尋樹左 中 右的特性,和後序遍歷的特點 2,後序遍歷為左右根,則陣列末尾為根,然後依據大小找出左子樹和右子樹...

劍指offer 二叉樹遍歷

deque佇列 deque佇列 給定一棵二叉搜尋樹,請找出其中第k大的節點。二叉搜尋樹本身就有規律 左子樹比根節點小,右子樹比根節點大 二叉搜尋樹的中序遍歷為 遞增序列 中序遍歷的倒序 判斷 defkthlargest self,root treenode,k int int defhelper r...