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 相关文章推荐
php 读取shell管道传输过来的内容
Mar 01 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
May 04 PHP
PHP魔术方法__GET、__SET使用实例
Nov 25 PHP
php使用正则表达式获取图片url的方法
Jan 16 PHP
php发送邮件的问题详解
Jun 22 PHP
PHP数组去重比较快的实现方式
Jan 19 PHP
php ajax异步读取rss文档数据
Mar 29 PHP
PHP数据库操作Helper类完整实例
May 11 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
Sep 29 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
Apr 27 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 PHP
PHP简单实现循环链表功能示例
Nov 10 #PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
Nov 08 #PHP
php基于环形链表解决约瑟夫环问题示例
Nov 07 #PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
Nov 07 #PHP
PHP基于回溯算法解决n皇后问题的方法示例
Nov 07 #PHP
php实现的三个常用加密解密功能函数示例
Nov 06 #PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
Nov 06 #PHP
You might like
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
yii2 在控制器中验证请求参数的使用方法
2019/06/19 PHP
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
JavaScript通过join函数连接数组里所有元素的方法
2015/03/20 Javascript
js电话号码验证方法
2015/09/28 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
vue中的数据绑定原理的实现
2018/07/02 Javascript
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
python字符串排序方法
2014/08/29 Python
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
Python timeit模块原理及使用方法
2020/10/10 Python
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
经济信息系毕业生自荐信范文
2014/03/15 职场文书
区域销售主管岗位职责
2014/06/15 职场文书
物理教育专业求职信
2014/06/25 职场文书
高一作文之乐趣
2019/11/21 职场文书
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python
TV动画《间谍过家家》公开PV
2022/03/20 日漫
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers