题解 | #二叉搜索树的后序遍历序列#

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

http://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd

//首先我们知道二叉搜索树的中序遍历就是将数组排序,也就是说数组排序过后就是二叉搜索树的中序遍历结果
//所以我们先将数组排序,得到它的中序遍历结果,然后现在有了后序和中序,我们先假设他是后序遍历的结果
//等中途推出毛病了,证明他就不是二叉树的后序遍历。因为中序是确定的,并且后序的最后一个肯定是根
//我们就判断这个根是否在中序数组里面就可以了,如果不在说明就不是后序遍历的结果
import java.util.Arrays;
public class Solution {
    private boolean result=true;
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence.length==0)
            return false;
       int[] mid=new int[sequence.length];
        for(int i=0;i<sequence.length;i++){
            mid[i]=sequence[i];
        }
        Arrays.sort(mid);
        isHaving(mid,0,mid.length-1,sequence,0,sequence.length-1);
        return result;
    }
    private void isHaving(int[] mid,int midstart,int midend,int[] last,int laststart,int lastend){
            if(midstart>midend||laststart>lastend)
                return ;
        int temp=last[lastend];
        boolean flag=false;
        for(int i=midstart;i<=midend;i++){
            if(temp==mid[i]){
                flag=true;//说明后序的根在中序数组中,继续进行下一个节点的判断
                isHaving(mid,midstart,i-1,last,laststart,laststart+i-midstart-1);//判断左子树
                isHaving(mid,i+1,midend,last,laststart+i-midstart,lastend-1);//判断右子树
            }
        }
        if(!flag)//说明后序的根不在中序数组,结果直接就是FALSE了
            result=false;
        }
}
全部评论
666
1 回复 分享
发布于 2021-10-05 12:19

相关推荐

沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
3
2
分享

创作者周榜

更多
牛客网
牛客企业服务