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

2021-07-23 22:15:49 字數 984 閱讀 1938

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

經典的問題,二叉樹的題目很多都是用遞迴來解決。注意到二叉查詢樹的後序序列的最後乙個數為根結點資料,它應該比左孩子大,比右孩子小,根據這個特點遞迴地檢查陣列中是否所有元素都滿足這個特點。

下面總結幾種寫法(均通過了所有測試用例)。

遞迴基本寫法:

class solution 

return is_bst(sequence,start,mid) && is_bst(sequence,mid,end);

} bool verifysquenceofbst(vector

sequence)

};

class solution 

int root = sequence[length-1];

vector

leftsequence;

vector

rightsequence;

int i = 0;

for (;i < length-1;++i)

else

}for (;i < length-1;++i)

else

}return isbst(leftsequence) && isbst(rightsequence);

}bool verifysquenceofbst(vector

sequence)

return isbst(sequence);

}};

非遞迴寫法,不過也是沿用遞迴的思路,這種寫法比較精妙,基本想法是,如果是後序遍歷序列,那麼所有的左孩子都應該比右孩子小才對,乙個乙個這樣比較就好了。

class solution 

return

true;

}};

劍指offer 二叉樹 二叉樹搜尋樹

package bst import j a.util.public class bst if pre.length 0 in.length 0 treenode root new treenode pre 0 for int i 0 i in.length i return root 判斷給定陣列...

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

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。author zy date 2017年10月13日 下午9 34 21 decription 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如...

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

時間限制 1秒 空間限制 32768k 熱度指數 524747 本題知識點 棧 樹輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。這兩天狀態不行,沒多大刷題的動力。菜還不想動,說的大概就是我了。遞迴 大佬的思路...