经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
[PHP]算法- 判断是否为二叉搜索树的后序遍历序列的PHP实现
来源:cnblogs  作者:陶士涵  时间:2018/10/10 9:08:57  对本文有异议
  1. 二叉搜索树的后序遍历序列:
  2. 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
  3. 思路:
  4. 1.后序遍历是 左右中 最后一个元素是根结点
  5. 2.二叉搜索树,左子树<=根结点<=右子树
  6. 3.遍历数组,找到第一个大于root的位置,该位置左面为左子树,右面为右子树
  7. 4.遍历右子树,如果有小于root的返回false
  8. 5.递归左右左右子树
  9. VerifySquenceOfBST(seq)
  10. judge(seq,0,seq.size-1)
  11. judge(seq,start,end)
  12. if start>=end return true
  13. root=seq[end]
  14. index
  15. for i=start;i<end;i++
  16. if seq[i]>= root
  17. index=i
  18. break
  19. for i=index;i<end;i++
  20. if seq[i]<root
  21. return false
  22. return judge(seq,start,index-1) && judge(seq,index,end-1)
  1. <?php
  2. function judge($seq,$start,$end){
  3. if(empty($seq)) return false;
  4. //跳出条件
  5. if($start>=$end) return true;
  6. $root=$seq[$end];
  7. $index=$end;
  8. //找出第一个大于root的位置
  9. for($i=$start;$i<$end;$i++){
  10. if($seq[$i]>=$root){
  11. $index=$i;
  12. break;
  13. }
  14. }
  15. //查找右子树中如果有小于root的返回false
  16. for($i=$index;$i<$end;$i++){
  17. if($seq[$i]<$root){
  18. return false;
  19. }
  20. }
  21. //短路语法递归调用
  22. return judge($seq,$start,$index-1) && judge($seq,$index,$end-1);
  23. }
  24. function VerifySquenceOfBST($sequence)
  25. {
  26. return judge($sequence,0,count($sequence)-1);
  27. }
  28. $seq=array(1,2,3);
  29. $bool=VerifySquenceOfBST($seq);
  30. var_dump($bool);

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号