传送门 nowcoder leetcode
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 如果是则返回 true,否则返回 false。 假设输入的数组的任意两个数字都互不相同。
C++ 代码 - nowcoder 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 class Solution {public : bool VerifySquenceOfBST (vector<int > sequence) { if (sequence.empty ()) return false ; if (sequence.size () == 1 ) return true ; return VerifySquenceOfBSTCore (sequence, 0 , sequence.size () - 1 ); } bool VerifySquenceOfBSTCore (vector<int >& sequence, int start, int end) { if (start >= end) return true ; int idx = start; while (idx < end && sequence[idx] < sequence[end]) idx ++; for (int i = idx; i < end; i ++) { if (sequence[i] < sequence[end]) return false ; } return VerifySquenceOfBSTCore (sequence, start, idx - 1 ) && VerifySquenceOfBSTCore (sequence, idx, end - 1 ); } };
C++ 代码 - leetcode 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 class Solution {public : bool verifyTreeOrder (vector<int >& postorder) { if (postorder.empty () || postorder.size () == 1 ) return true ; return dfs (postorder, 0 , postorder.size () - 1 ); } bool dfs (vector<int >& postorder, int start, int end) { if (start >= end) return true ; int idx = start; while (idx < end && postorder[idx] < postorder[end]) { idx ++; } for (int i = idx; i < end; i ++) { if (postorder[i] <= postorder[end]) { return false ; } } return dfs (postorder, start, idx - 1 ) && dfs (postorder, idx, end - 1 ); } };