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 相关文章推荐
关于文本留言本的分页代码
Oct 09 PHP
PHP连接access数据库
Mar 27 PHP
PHP 命名空间实例说明
Jan 27 PHP
phpmyadmin打开很慢的解决方法
Apr 21 PHP
php使用递归计算文件夹大小
Dec 24 PHP
php通过curl模拟登陆DZ论坛
May 11 PHP
Symfony2在Nginx下的配置方法图文教程
Feb 04 PHP
php打包压缩文件之ZipArchive方法用法分析
Apr 30 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
php 类中的常量、静态属性、非静态属性的区别
Apr 09 PHP
利用php-cli和任务计划实现刷新token功能的方法
May 03 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
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
深入了解php4(2)--重访过去
2006/10/09 PHP
php判断终端是手机还是电脑访问网站的思路及代码
2013/04/24 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
PHP中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
Laravel手动分页实现方法详解
2016/10/09 PHP
强制设为首页代码
2006/06/19 Javascript
各种常用的JS函数整理
2013/10/25 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
JavaScript中利用各种循环进行遍历的方式总结
2015/11/10 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
vue实现图书管理demo详解
2017/10/17 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
ES6对象操作实例详解
2020/05/23 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
Python中字符串的格式化方法小结
2016/05/03 Python
Python下载网络小说实例代码
2018/02/03 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
python xpath获取页面注释的方法
2019/01/14 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
Python求解正态分布置信区间教程
2019/11/20 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
Python图像处理库PIL的ImageFont模块使用介绍
2020/02/26 Python
Python reques接口测试框架实现代码
2020/07/28 Python
termux中matplotlib无法显示中文问题的解决方法
2021/01/11 Python
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
优秀通讯员事迹材料
2014/01/28 职场文书
学习自我鉴定
2014/02/01 职场文书
美术教师求职信范文
2015/03/20 职场文书
2015年小学财务工作总结
2015/07/20 职场文书
社区服务理念口号
2015/12/25 职场文书
2019财务管理制度最新范本!
2019/07/09 职场文书