zoukankan      html  css  js  c++  java
  • 二叉搜索树的后序遍历序列

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

    题目描述

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

    public class Solution {
        public boolean VerifySquenceOfBST(int [] sequence) {
            
        }
    }
    

    题目分析

    什么是二叉搜索树(BST)

    二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

    题解思路

    image

    代码

     public boolean VerifySquenceOfBST(int [] sequence) {
            if(sequence == null || sequence.length == 0) return false;
                int len = sequence.length;
                int i = 0;
                int root = sequence[len - 1];
    
                //二叉搜索树中左节点小于root 当大于root时跳出循环
                for(; i <len-1 ;i++){//注意这里i不能取到len - 1,最后一个数为root
                    if(sequence[i] > root){
                        break;
                    }
                }
    
                //右子树的起始点
                int j = i;
    
                //二叉搜索树中右节点大于root 当小于root返回false
                for(; j < len-1; j++){
                    if(sequence[j] < root) return false;
                }
    
                boolean leftFlg = true;
                boolean rightFlg = true;
                //判断左子树是否是二叉搜索树
                if(i > 0){
                    leftFlg = VerifySquenceOfBST( Arrays.copyOfRange(sequence,0,i ));
                }
                //判断右子树是否是二叉搜索树
                if(i < len -1 ){
                    rightFlg = VerifySquenceOfBST(Arrays.copyOfRange(sequence,i,len-1 ));
                }
    
                return (leftFlg&&rightFlg);
    
        }
    

    总结

    • 采用copyOfRange()方法复制数组的一部分,安利一下(要注意的是区间范围是左闭右开)
    • 注意sequence为空的情况
  • 相关阅读:
    Spring MVC常用注解
    SQL预处理
    浅析用链表实现的队列
    logrotate自动切割某一服务模板
    3种安装nginx的方法以及相关的配置文件
    一键部署NFS服务端脚本
    rsync排错
    NFS排错
    nfs客户端 一键切换 nfs高可用主机脚本
    实时监控nfs服务端是否宕机
  • 原文地址:https://www.cnblogs.com/flyingcr/p/10428294.html
Copyright © 2011-2022 走看看