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入门速成教程
Mar 19 PHP
PHP程序员编程注意事项
Apr 10 PHP
php 用checkbox一次性删除多条记录的方法
Feb 23 PHP
php定时删除文件夹下文件(清理缓存文件)
Jan 23 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
php的4种常见运行方式
Mar 20 PHP
Thinkphp和onethink实现微信支付插件
Apr 13 PHP
详解php实现页面静态化原理
Jun 21 PHP
详解cookie验证的php应用的一种SSO解决办法
Oct 20 PHP
php源码的安装方法和实例
Sep 26 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
Oct 21 PHP
php修改word的实例方法
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
无数据库的详细域名查询程序PHP版(5)
2006/10/09 PHP
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
php获取淘宝分类id示例
2014/01/16 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
基于php实现的验证码小程序
2016/12/13 PHP
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
谈谈JavaScript中function多重理解
2015/08/28 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
Webpack打包css后z-index被重新计算的解决方法
2017/06/18 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
简述vue中的config配置
2018/01/23 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
python使用sorted函数对列表进行排序的方法
2015/04/04 Python
Python实现识别手写数字 Python图片读入与处理
2020/03/23 Python
Python解决八皇后问题示例
2018/04/22 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
2019/03/05 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
Python Tkinter实例——模拟掷骰子
2020/10/24 Python
python 从list中随机取值的方法
2020/11/16 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
亚洲颇具影响力的男性在线购物零售商:His
2019/11/24 全球购物
药学专业个人自我评价
2013/11/11 职场文书
升学宴主持词
2014/04/02 职场文书
2014年小学安全工作总结
2014/12/04 职场文书
学习经验交流会策划书
2015/11/02 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python