剑指 Offer 33. 二叉搜索树的后序遍历序列
作者:互联网
题目
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。
参考以下这颗二叉搜索树:
5
/ \
2 6
/
1 3
示例
输入: [1,6,3,2,5]
输出: false
输入: [1,3,2,6,5]
输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1:递归
Java实现
class Solution {
public boolean verifyPostorder(int[] postorder) {
int n = postorder.length;
return pd(postorder, 0, n - 1);
}
public boolean pd(int[] postorder, int start, int end){
//等于:只有一个节点,不用判断
//大于:没有节点
if (start >= end) return true;
//根的值
int root = postorder[end];
//左子树,都小于root的值
int mid = start;
while (postorder[mid] < root) mid++;
//此时mid为右子树的第一个值
//如果右子树存在小于root的值返回false
int tmp = mid;
while (tmp < end) {
if (postorder[tmp] < root) return false;
tmp++;
}
//递归左子树、右子树检查
return pd(postorder, start, mid - 1) && pd(postorder, mid, end - 1);
}
}
标签:end,Offer,33,mid,二叉,int,return,root,postorder 来源: https://blog.csdn.net/qq_42467009/article/details/121722835