[劍指offer] 二叉搜索樹的後序遍歷序列
阿新 • • 發佈:2017-11-28
mar 註意 solution size 新建 div 否則 ext 若有
題目描述
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
二叉搜索樹:(若有)左子樹全部結點小於根節點,(若有)右子樹全部結點大於根節點。
因此若一個數組為二叉搜索樹的後序遍歷,則最後一個元素為根節點,前面的元素以某處分開前半部分全部小於此數,後半部分全部大於此數,且這兩個部分又分別為一個二叉搜索樹。
然而因為內存限制,不能直接遞歸調用給出的函數,而是新建一個有傳值坐標的遞歸函數。
還要註意,二叉搜索樹不能為空。
class Solution { public: boolVerifySquenceOfBST(vector<int> sequence) { if (sequence.size() == 0) return false; // 搜索樹不能為空 return VerifySquenceOfBST(sequence, 0, sequence.size() - 1); } bool VerifySquenceOfBST(vector<int> sequence, int beginPos, int endPos) { // 由於空間限制重寫一個具有pos傳值的函數而不是直接遞歸調用原函數if (endPos - beginPos <= 1) return true; int root = sequence[endPos]; int rightPos = beginPos; while (sequence[rightPos] < root) rightPos++; bool rightIsRight = true; for (int i = rightPos; i < endPos; i++) { if (sequence[i] < root) { rightIsRight= false; break; } } if (!rightIsRight) return false; return VerifySquenceOfBST(sequence, beginPos, rightPos - 1) && VerifySquenceOfBST(sequence, rightPos, endPos - 1); } };
[劍指offer] 二叉搜索樹的後序遍歷序列