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 相关文章推荐
PHP.MVC的模板标签系统(五)
Sep 05 PHP
PHP在Web开发领域的优势
Oct 09 PHP
用PHP读取和编写XML DOM的实现代码
Feb 03 PHP
PHP排序算法的复习和总结
Feb 15 PHP
解析MySql与Java的时间类型
Jun 22 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
Jan 07 PHP
PHP中Trait及其应用详解
Feb 14 PHP
PHP多种序列化/反序列化的方法详解
Jun 23 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
PHP中PDO事务处理操作示例
May 02 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 PHP
PHP 数组操作详解【遍历、指针、函数等】
May 13 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
php 各种应用乱码问题的解决方法
2010/05/09 PHP
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
javascript确认框的三种使用方法
2013/12/17 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
Javascript验证方法大全
2015/09/21 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
浅析JavaScript中的array数组类型系统
2016/07/18 Javascript
jQuery flip插件实现的翻牌效果示例【附demo源码下载】
2016/09/20 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
微信小程序动态生成二维码的实现代码
2018/07/25 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
快速了解Node中的Stream流是什么
2019/02/13 Javascript
关于layui导航栏不展示下拉列表的解决方法
2019/09/25 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
opencv转换颜色空间更改图片背景
2019/08/20 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
2019/08/23 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
财务部岗位职责
2013/11/19 职场文书
大学生自我鉴定
2013/12/08 职场文书
小区门卫工作职责
2013/12/14 职场文书
会计专业导师推荐信
2014/03/08 职场文书
小摄影师教学反思
2014/04/27 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书
幼儿园教师辞职信
2019/06/21 职场文书