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 相关文章推荐
xml+php动态载入与分页
Oct 09 PHP
php flush类输出缓冲剖析
Oct 19 PHP
php中关于socket的系列函数总结
May 18 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
May 21 PHP
php使用文本统计访问量的方法
May 12 PHP
图文详解PHP环境搭建教程
Jul 16 PHP
PHP实现Session入库/存入redis的方法
May 04 PHP
详解json在php中的应用
Sep 30 PHP
laravel使用Faker数据填充的实现方法
Apr 12 PHP
thinkphp5框架路由原理与用法详解
Feb 11 PHP
你真的了解PHP中的引用符号(&)吗
May 12 PHP
解决Laravel使用验证时跳转到首页的问题
Nov 17 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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
一家之言的经验之谈php+mysql扎实个人基本功
2008/03/27 PHP
PHP学习笔记之二
2011/01/17 PHP
PHP中的替代语法简介
2014/08/22 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
treepanel动态加载数据实现代码
2012/12/15 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
2015/03/18 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
jQuery Real Person验证码插件防止表单自动提交
2015/11/06 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
2016/02/21 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
jQuery实现的页面弹幕效果【测试可用】
2018/08/17 jQuery
Koa 中的错误处理解析
2019/04/09 Javascript
[57:41]Secret vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python创建文件和追加文件内容实例
2014/10/21 Python
pandas中Timestamp类用法详解
2017/12/11 Python
Pyinstaller将py打包成exe的实例
2018/03/31 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
安全检查汇报材料
2014/12/26 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
mybatis中注解与xml配置的对应关系和对比分析
2021/08/04 Java/Android