zoukankan      html  css  js  c++  java
  • PHP 通过数组判断数组顺序输出是否是二叉排序树的后序遍历结果

     1 <?php
     2     #通过数组判断该数组顺序输出是否是二叉树后序遍历结果
     3     
     4     #@param a 待判断数组
     5     #@param s 待判断开始部分
     6     #@param e 待判断结束部分
     7     function is_bst_post($a, $s, $e) {
     8         if ($s == $e) {
     9             return true;
    10         }
    11 
    12         #由于是后序遍历,所以根节点必然是最后一个元素
    13         $root = $a[$e];
    14         #找到第一个大于等于根节点的元素
    15         #如果符合bst的数组,从s到i-1,都是左子树元素,i到e-1都是右子树的元素
    16         #此处规定二叉树如果有相同的元素都放在右子树
    17         $i = $s;
    18         while ($i < $e && $a[$i] < $root) $i++;
    19 
    20         #分别判断左右子树是否是bst
    21         #如果左子树存在,判断左子树是否是bst
    22         if ($i > $s) {
    23             #此处不需要判断左子树是否都小于root,因为i左边的元素都已经是小于root了
    24             $result_l = is_bst_post($a, $s, $i - 1);
    25         } else if ($i == $s) { #左子树不存在
    26             $result_l = true;
    27         }
    28 
    29         #如果右子树存在,判断右子树是否是bst
    30         if ($i < $e) {
    31             #查看右子树是否所有节点均大于等于root
    32             for ($j = $i; $j < $e; $j++) {
    33                 if ($a[$j] < $root) {
    34                     return false;
    35                 }
    36             }
    37             $result_r = is_bst_post($a, $i, $e - 1);
    38         } else if ($i == $e) { #右子树不存在
    39             $result_r = true;
    40         }
    41 
    42         return ($result_l && $result_r);
    43     }
    44 
    45     $a = array(5, 7, 6, 9, 11, 10, 8);
    46     $b = array(7, 4, 6, 5);
    47     $t = is_bst_post($a, 0, count($a) - 1);
    48     $t2 = is_bst_post($b, 0, count($b) - 1);
    49     var_dump($t, $t2);
    50 ?>

    bool(true) bool(false)

  • 相关阅读:
    20181022-JSP 开发环境搭建
    20181019-JSP 教程/简介
    20180829-Java多线程编程
    20180827(02)- Java发送邮件
    20180827-Java网络编程
    20180912-Java实例02
    docker安装redis
    springboot2集成swagger2出现guava包下的FluentIterable.append方法找不到
    Linux Centos7 网络设置UUID号的修改方法
    CentOS 7 主机名bogon解决办法
  • 原文地址:https://www.cnblogs.com/zemliu/p/2709249.html
Copyright © 2011-2022 走看看