剑指 Offer 33. 二叉搜索树的后序遍历序列
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true
,否则返回 false
。假设输入的数组的任意两个数字都互不相同。
输入输出
1 2 3 4 5 6 7 8 9 10 11
| 5 / \ 2 6 / \ 1 3
输入: [1,6,3,2,5] 输出: false
输入: [1,3,2,6,5] 输出: true
|
基本思路
分治 裁剪出 [左子树 | 右子树 | 根节点] 之后进行递归判断
java实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Solution { public boolean verifyPostorder(int[] postorder) { return recur(postorder, 0, postorder.length - 1); } boolean recur(int[] postorder, int i, int j) { if(i >= j) return true; int p = i; while(postorder[p] < postorder[j]) p++; int m = p; while(postorder[p] > postorder[j]){ p++; if(postorder[p] < postorder[j]){ return false; } } return recur(postorder, i, m - 1) && recur(postorder, m, j - 1); } }
|