PHP实现按之字形顺序打印二叉树的方法


Posted in PHP onJanuary 16, 2018

本文实例讲述了PHP实现按之字形顺序打印二叉树的方法。分享给大家供大家参考,具体如下:

问题

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

解决思路

使用两个栈

实现代码

<?php
/*class TreeNode{
  var $val;
  var $left = NULL;
  var $right = NULL;
  function __construct($val){
    $this->val = $val;
  }
}*/
function MyPrint($pRoot)
{
  if($pRoot == NULL)
    return [];
  $current = 0;
  $next  = 1;
  $stack[0] = array();
  $stack[1] = array();
  $resultQueue = array();
  array_push($stack[0], $pRoot);
  $i = 0;
  $result = array();
  $result[0]= array();
  while(!empty($stack[0]) || !empty($stack[1])){
    $node = array_pop($stack[$current]);
    array_push($result[$i], $node->val);
    //var_dump($resultQueue);echo "</br>";
    if($current == 0){
      if($node->left != NULL)
        array_push($stack[$next], $node->left);
      if($node->right != NULL)
        array_push($stack[$next], $node->right);
    }else{
      if($node->right != NULL)
        array_push($stack[$next], $node->right);
      if($node->left != NULL)
        array_push($stack[$next], $node->left);
    }
    if(empty($stack[$current])){
      $current = 1-$current;
      $next  = 1-$next;
      if(!empty($stack[0]) || !empty($stack[1])){
        $i++;
        $result[$i] = array();
      }
    }
  }
  return $result;
}

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

PHP 相关文章推荐
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
May 07 PHP
ThinkPHP CURD方法之page方法详解
Jun 18 PHP
php实现的css文件背景图片下载器代码
Nov 11 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
Mar 23 PHP
php获取指定范围内最接近数的方法
Jun 02 PHP
php数组索引与键值操作技巧实例分析
Jun 24 PHP
PHP递归遍历多维数组实现无限分类的方法
May 06 PHP
基于ThinkPHP实现的日历功能实例详解
Apr 15 PHP
PHP封装cURL工具类与应用示例
Jul 01 PHP
laravel 框架结合关联查询 when()用法分析
Nov 22 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
Jan 16 #PHP
PHP实现找出链表中环的入口节点
Jan 16 #PHP
详解thinkphp中的volist标签
Jan 15 #PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
Jan 15 #PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
Jan 15 #PHP
PHP7扩展开发之hello word实现方法详解
Jan 15 #PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 #PHP
You might like
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
php模块memcache和memcached区别分析
2011/06/14 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
JQuery index()方法使用代码
2010/06/02 Javascript
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
javascript写一个ajax自动拦截并下载数据代码实例
2019/09/07 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
Python中运行并行任务技巧
2015/02/26 Python
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
在Django的模型中添加自定义方法的示例
2015/07/21 Python
python实现将内容分行输出
2015/11/05 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
python学习笔记之多进程
2020/08/06 Python
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
迪卡侬英国官网:Decathlon英国
2017/04/08 全球购物
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
优秀求职信范文分享
2013/12/19 职场文书
工作个人的自我评价
2014/01/14 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
元旦寄语大全
2014/04/10 职场文书
党员个人剖析材料
2014/09/30 职场文书
观后感的写法
2015/06/19 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
看完这篇文章获得一些java if优化技巧
2021/07/15 Java/Android
MySQL里面的子查询的基本使用
2021/08/02 MySQL
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android