• [PHP]算法- 判断是否为二叉搜索树的后序遍历序列的PHP实现


    二叉搜索树的后序遍历序列:
    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
    
    思路:
    1.后序遍历是 左右中 , 最后一个元素是根结点 
    2.二叉搜索树,左子树<=根结点<=右子树
    3.遍历数组,找到第一个大于root的位置,该位置左面为左子树,右面为右子树
    4.遍历右子树,如果有小于root的返回false
    5.递归左右左右子树
    
    VerifySquenceOfBST(seq)
        judge(seq,0,seq.size-1)
    judge(seq,start,end)
        if start>=end return true
        root=seq[end]
        index
        for i=start;i<end;i++
            if seq[i]>= root
                index=i
                break
        for i=index;i<end;i++
            if seq[i]<root
                return false
        return judge(seq,start,index-1) && judge(seq,index,end-1)
    <?php
    
    function judge($seq,$start,$end){
            if(empty($seq)) return false;
            //跳出条件
            if($start>=$end) return true;
            $root=$seq[$end];
            $index=$end;
            //找出第一个大于root的位置
            for($i=$start;$i<$end;$i++){
                    if($seq[$i]>=$root){
                            $index=$i;
                            break;
                    }   
            }   
            //查找右子树中如果有小于root的返回false
            for($i=$index;$i<$end;$i++){
                    if($seq[$i]<$root){
                            return false;
                    }   
            }   
            //短路语法递归调用
            return judge($seq,$start,$index-1) && judge($seq,$index,$end-1);
    }
    
    function VerifySquenceOfBST($sequence)
    {
        return judge($sequence,0,count($sequence)-1);
    }
    
    $seq=array(1,2,3);
    $bool=VerifySquenceOfBST($seq);
    var_dump($bool);
  • 相关阅读:
    重构原则
    【重构:改善既有代码的设计】读书笔记——开篇
    C#值参数和引用参数
    使用Aspose.Cells利用模板导出Excel(C#)
    在MVC中使用rdlc格式的报表
    程序员如何高效学习
    IT 圈里有哪些经常被读错的词?
    VS2017生成解决方案报错,提示对路径的访问被拒绝
    JavaScript中的数值转换
    Xadmin的配置及使用
  • 原文地址:https://www.cnblogs.com/taoshihan/p/9763007.html
Copyright © 2020-2023  润新知