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合并数组array_merge函数运算符加号与的区别
Oct 31 PHP
php过滤html标记属性类用法实例
Sep 23 PHP
PHP中基本HTTP认证技巧分析
Mar 16 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
Jan 08 PHP
CodeIgniter自定义控制器MY_Controller用法分析
Jan 20 PHP
Yii2 RESTful中api的使用及开发实例详解
Jul 06 PHP
PHP面向对象程序设计之对象生成方法详解
Dec 02 PHP
PHP实现移除数组中为空或为某值元素的方法
Jan 07 PHP
php+js实现的无刷新下载文件功能示例
Aug 23 PHP
php使用yield对性能提升的测试实例分析
Sep 19 PHP
PHP封装请求类实例分析【基于Yii框架】
Oct 17 PHP
php 利用socket发送GET,POST请求的实例代码
Jul 04 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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
基于MySQL体系结构的分析
2013/05/02 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
JavaScript 常用函数
2009/12/30 Javascript
图片onload事件触发问题解决方法
2011/07/31 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
jQuery取得iframe中元素的常用方法详解
2016/01/14 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
详解用webpack2搭建angular2的项目
2017/06/22 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
python简单的函数定义和用法实例
2015/05/07 Python
简单总结Python中序列与字典的相同和不同之处
2016/01/19 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
HMV日本官网:全球知名的音乐、DVD和电脑游戏零售巨头
2016/08/13 全球购物
学习党章心得体会2016
2016/01/15 职场文书