剑指offer-二叉搜索树的后序遍历序列

拥有回忆 提交于 2019-12-30 22:52:51

题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路
就是根据后序遍历找到根节点,小于根节点的就是左子树的范围,大于的就是右子树,根据这样来划分左右子树,然后进行递归遍历
思路是知道的,就是写代码的时候脑子混乱,写了很长时间才AC

public class Solution {
    public boolean VerifySquenceOfBST(int[] sequence) {
        if(sequence == null || sequence.length < 1){
            return false;
        }
        return VerifySquenceOfBST(0,sequence.length-1,sequence);
    }
    public boolean VerifySquenceOfBST(int l,int r,int[] seq){
          if(l < r) {
            int root = seq[r];
            int index = l;
            while (index < r && seq[index] < root) {
                index++;
            }
            for (int i = index; i < r; i++) {
                if (root > seq[i]) {
                    return false;
                }
            }
             //这里一定是r-1才行,否则会出现死循环
            return VerifySquenceOfBST(l, index - 1, seq) && VerifySquenceOfBST(index, r-1, seq);
        }
        return true;
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!