輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。
思路:這題目有點特殊,主要在於序列為空的時候,不是後序遍歷,返回的是false,但是在遞迴的時候,遞迴基要寫true,因為如果寫false,那麼遞迴的所有結果都是false。
step1:首先找到最後乙個就是根節點;
step2:然後比較左子樹,是否都比root的值小,得到左子樹的位置i - 1,並且儲存左子樹的所有值;
step3:從位置i開始,比較右子樹的值是否都大於root,如果小於則返回false,並且儲存右子樹的所有值;
step4:遞迴的比較左右子樹。
1class
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...