二叉搜索树的后序遍历序列

2023-05-16

题目

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

分析
碰到二叉树,优先想递归。
这里,后序数组,最后一个是根节点;从数组开始到第一个比root大的元素前面属于左子树;后面属于右子树;可以检查右子树是否都比root大。否,直接返回false;是,递归调用判断函数;
这里,终结条件是数组比较的开始位置大于或等于结束位置。假如跑到这一步,说明前面递归都没返回false。即,满足搜索二叉树,返回True。

代码实现

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence == null || sequence.length == 0){ //边界条件
            return false; 
        }
        if(sequence.length == 1){ //边界条件
            return true;
        }
        return judge(sequence, 0, sequence.length - 1); 
    }

    public boolean judge(int[] m, int start, int end){ //判断递归函数,三个参数
        if(start >= end){ // 终结条件
            return true;
        }
        int root = m[end];
        int i = start;
        for(; i < end; i++){ //找到左子树的结尾节点
            if(m[i] > root){
                break;
            }
        }
        for(int j = i; j < end; j++){ //判断右子树是否符合搜索二叉树,即右子树都比root大
            if(m[j] <= root){
                return false;  
            }
        }
        return judge(m,start,i-1) && judge(m,i,end-1); // 递归左右两棵子树
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二叉搜索树的后序遍历序列 的相关文章

随机推荐