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跳出循环的方法以及continue、break、exit的区别介绍
Jul 01 PHP
PHP利用str_replace防注入的方法
Nov 10 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
Nov 27 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
php基于base64解码图片与加密图片还原实例
Nov 03 PHP
php对象和数组相互转换的方法
May 12 PHP
Thinkphp关闭缓存的方法
Jun 26 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
PHP实现的日历功能示例
Sep 01 PHP
PHP goto语句用法实例
Aug 06 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 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/12/11 PHP
php通过字符串调用函数示例
2014/03/02 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
laravel自定义分页效果
2017/07/23 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
php apache开启跨域模式过程详解
2019/07/08 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
锋利的jQuery jQuery中的DOM操作
2010/03/21 Javascript
JS关键字变色实现思路及代码
2013/02/21 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
初识Node.js
2015/03/20 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
JavaScript中Window对象的属性及事件
2015/12/25 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
2018/03/21 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
2018/10/11 Javascript
微信小程序时间标签和时间范围的联动效果
2019/02/15 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
Python httplib,smtplib使用方法
2008/09/06 Python
python自定义类并使用的方法
2015/05/07 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
你懂得怎么写自荐信吗?
2013/12/27 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
银行金融服务方案
2014/06/11 职场文书
三严三实对照检查材料
2014/08/25 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers