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)

PHP 通过数组判断数组顺序输出是否是二叉排序树的后序遍历结果相关推荐

  1. 9判断整数序列是不是二元查找树的后序遍历结果

    转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4252095.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己 ...

  2. 判断整数序列是不是二元查找树的后序遍历结果

    题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果. 如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 8 ...

  3. 判断某个数列是不是二元查找树的后序遍历。

    给定一个数组序列,判断这个数列是不是二叉查找树的后序遍历.后序遍历是先左节点,再右节点,最后根节点.二叉查找树定义为节点的左子树都小于该节点,该节点的右子树都大于该节点.如果是后序遍历,那么根是最后一 ...

  4. XDOJ 363 输出快速排序递归算法隐含递归树的后序遍历序列 AC

    像我这样的菜鸡也没有什么能输出的,好像我写题解也不算输出. 最近期末了,写数据结构实验的时候,这个题写了挺久的,搞出来记录一下. 输出快速排序递归算法隐含递归树的后序遍历序列 描述: 快速排序递归算法 ...

  5. #swust oj978,979,980输出利用先序遍历创建的二叉树的中序遍历序列,后序遍历序列,层次遍历序

    输出利用先序遍历创建的二叉树的中序遍历序列,后序遍历序列,层次遍历序列 ***层次遍历思路: 1.初始化一个队列 2.把根节点指针入队 3.队列非空时:出队列取得一个结点指针,访问该节点,若该节点的左 ...

  6. 【数据结构笔记26】根据一棵树的先序/中序遍历Push与Pop内容,输出这棵树的先序、中序、后序遍历数组(不需要真的建立出树)

    本次笔记内容: 练习题-TTA.1 题意理解 练习题-TTA.2 核心算法 文章目录 题意理解 根据Push与Pop直接得出先序.中序数组 根据pre和in生成post C实现 题意理解 先来回忆非递 ...

  7. 判断给定的整数数组是不是某二叉搜索树的后序遍历的结果

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

  8. 数组反向遍历ios_LeetCode106.从中序与后序遍历序列构造二叉树(Construct Binary Tree from Inor...)...

    106. 从中序与后序遍历序列构造二叉树 根据一棵树的中序遍历与后序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 中序遍历 inorder = [9,3,15,20,7]后序遍 ...

  9. vue 倒序遍历数组_【一天一大 lee】从中序与后序遍历序列构造二叉树 (难度:中等)Day20200925...

    20200925 题目:[1] 根据一棵树的中序遍历与后序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出: 中序遍历 inorder = [9,3,15,20,7]后序遍历 pos ...

最新文章

  1. SpringBoot+MySql实现一对多再多对多的数据库的设计以及业务层增删改查的实现
  2. Flask框架从入门到精通之路由(三)
  3. 机动车驾驶人科目三考试项目及合格标准
  4. 数据中心网络vs云网络vs容器网络
  5. 【Spark】一条 SQL 在 Apache Spark 之旅(上)
  6. 自媒体人本质是互联网公司内容运营的角色
  7. jquery 把元素移动到另外一个元素里面
  8. Jenkins任务配置详解,支持ssh远程部署,maven聚合项目,springboot
  9. python 66:re正则表达式5(全- tcy)
  10. 国外大神制作的史上最精简Win10系统,真有那么好用吗?
  11. 手机自动签到简易应用
  12. 电脑白屏,“笔记本电脑开机白屏的原因和解决方法”的解决方案
  13. 1、Dreamweaver工具的使用
  14. L1、L2正则regularization和weight decay
  15. 如何在矩池云上安装语音识别模型 Whisper
  16. 兆隆计算机学院新建大楼网络设计项目方案
  17. 最简单的python语言程序设计_编程中最简单的语言Python,这样学或许更容易
  18. 2019.9.19年华为杯数模
  19. 用python的tkinter做游戏(七)—— 双人射击游戏Demo(类的应用) 篇
  20. HTML服务器发送事件

热门文章

  1. Django使用已经存有数据的mysql数据库
  2. 026-请问你怎么测试网络协议
  3. Spring-AOP的实现方法
  4. 关于Spring Cloud 框架热部署的方法
  5. iOS runtime实用篇:让你快速上手一个项目
  6. XStream 用法汇总
  7. 模拟系统照相机图片裁剪的功能
  8. android学习之-简单对话框
  9. 51CTO路由技术电子书
  10. NIS 服务器的配置