PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法


Posted in PHP onNovember 10, 2017

本文实例讲述了PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法。分享给大家供大家参考,具体如下:

先来看看前序遍历、中序遍历与后序遍历原理图:

PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法

根据树的前序遍历和中序遍历构造树并输出后序遍历代码如下:

<?php
class BinaryTreeNode{
  public $m_value;
  public $m_left;
  public $m_right;
}
function ConstructCore($preorder,$inorder){
  if(count($preorder)!=count($inorder) || count($preorder)==0 || count($inorder)==0)
  return null;
  $headNode=new BinaryTreeNode;
  $headNode->m_value=$preorder[0];
  if(count($preorder)==1){
    $headNode->m_left=null;
    $headNode->m_right=null;
    return $headNode;
  }
  array_shift($preorder);
  $pos=array_search($headNode->m_value,$inorder);
  $leftin=array_slice($inorder,0,$pos);
  $rightin=array_slice($inorder,$pos+1);
  $leftpre=array_slice($preorder,0,$pos);
  $rightpre=array_slice($preorder,$pos);
  $headNode->m_left=ConstructCore($leftpre,$leftin);
  $headNode->m_right=ConstructCore($rightpre,$rightin);
  return $headNode;
}
$pre=array(1,2,4,7,3,5,6,8);
$in=array(4,7,2,1,5,3,8,6);
$tree=ConstructCore($pre,$in);
function tail($tree){
  if($tree->m_right!=null)
  echo tail($tree->m_right);
  if($tree->m_left!=null)
  echo tail($tree->m_left);
    echo $tree->m_value;
}
tail($tree);
?>

运行结果:

86537421

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
屏蔽浏览器缓存另类方法
Oct 09 PHP
第十四节--命名空间
Nov 16 PHP
php zend 相对路径问题
Jan 12 PHP
DedeCMS dede_channeltype表字段注释
Apr 07 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
Jul 16 PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 PHP
destoon供应信息title调用出公司名称的方法
Aug 22 PHP
php验证session无效的解决方法
Nov 04 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
Jan 20 PHP
php 问卷调查结果统计
Oct 08 PHP
Yii框架实现记录日志到自定义文件的方法
May 23 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
PHP用函数嵌入网站访问量计数器
Oct 27 #PHP
PHP实现网站访问量计数器
Oct 27 #PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
Oct 26 #PHP
详解php 使用Callable Closure强制指定回调类型
Oct 26 #PHP
php静态成员方法和静态的成员属性的使用方法
Oct 26 #PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
Oct 26 #PHP
利用php获得flv视频长度的实例代码
Oct 26 #PHP
You might like
如何删除多级目录
2006/10/09 PHP
PHP编程中八种常见的文件操作方式
2006/11/19 PHP
php include的妙用,实现路径加密
2008/07/29 PHP
php下封装较好的数字分页方法
2010/11/23 PHP
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
学习PHP的数组总结【经验】
2016/05/05 PHP
JavaScript更改class和id的方法
2008/10/10 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
Knockoutjs 学习系列(二)花式捆绑
2016/06/07 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
JS监听事件的叠加和移除功能
2018/11/19 Javascript
详解JavaScript 浮点数运算的精度问题
2019/07/23 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
JS实现吸顶特效
2020/01/08 Javascript
Python编程中的反模式实例分析
2014/12/08 Python
一步步解析Python斗牛游戏的概率
2016/02/12 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
前台领班岗位职责
2013/12/04 职场文书
红领巾广播站广播稿
2014/02/01 职场文书
建房协议书
2014/04/11 职场文书
党校学习心得体会范文
2014/09/09 职场文书
委托书范本
2014/09/13 职场文书
体育活动总结
2015/02/04 职场文书
开天辟地观后感
2015/06/09 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书