• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 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)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
php socket通信(tcp/udp)发布时间:2022-07-10
下一篇:
php中并发读写文件冲突的解决方案发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap