服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - PHP教程 - PHP实现按之字形顺序打印二叉树的方法

PHP实现按之字形顺序打印二叉树的方法

2019-10-25 12:46重口味AC PHP教程

这篇文章主要介绍了PHP实现按之字形顺序打印二叉树的方法,涉及php结合栈遍历二叉树的相关操作技巧,需要的朋友可以参考下

本文实例讲述了PHP实现按之字形顺序打印二叉树的方法。分享给大家供大家参考,具体如下:

问题

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

解决思路

使用两个栈

实现代码

  1. <?php 
  2. /*class TreeNode{ 
  3.   var $val; 
  4.   var $left = NULL; 
  5.   var $right = NULL; 
  6.   function __construct($val){ 
  7.     $this->val = $val; 
  8.   } 
  9. }*/ 
  10. function MyPrint($pRoot) 
  11.   if($pRoot == NULL) 
  12.     return []; 
  13.   $current = 0; 
  14.   $next  = 1; 
  15.   $stack[0] = array(); 
  16.   $stack[1] = array(); 
  17.   $resultQueue = array(); 
  18.   array_push($stack[0], $pRoot); 
  19.   $i = 0; 
  20.   $result = array(); 
  21.   $result[0]= array(); 
  22.   while(!empty($stack[0]) || !empty($stack[1])){ 
  23.     $node = array_pop($stack[$current]); 
  24.     array_push($result[$i], $node->val); 
  25.     //var_dump($resultQueue);echo "</br>"; 
  26.     if($current == 0){ 
  27.       if($node->left != NULL) 
  28.         array_push($stack[$next], $node->left); 
  29.       if($node->right != NULL) 
  30.         array_push($stack[$next], $node->right); 
  31.     }else
  32.       if($node->right != NULL) 
  33.         array_push($stack[$next], $node->right); 
  34.       if($node->left != NULL) 
  35.         array_push($stack[$next], $node->left); 
  36.     } 
  37.     if(empty($stack[$current])){ 
  38.       $current = 1-$current; 
  39.       $next  = 1-$next; 
  40.       if(!empty($stack[0]) || !empty($stack[1])){ 
  41.         $i++; 
  42.         $result[$i] = array(); 
  43.       } 
  44.     } 
  45.   } 
  46.   return $result; 

希望本文所述对大家PHP程序设计有所帮助。

延伸 · 阅读

精彩推荐
  • PHP教程PHP PDOStatement::bindColumn讲解

    PHP PDOStatement::bindColumn讲解

    今天小编就为大家分享一篇关于PHP PDOStatement::bindColumn讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看...

    php参考手册5082019-06-25
  • PHP教程PHP代码重构方法漫谈

    PHP代码重构方法漫谈

    这篇文章主要介绍了PHP代码重构方法,结合实例形式较为详细的分析了php代码重构的概念、原理、相关实现技巧与注意事项,需要的朋友可以参考下 ...

    PHP群:2234946784452019-10-12
  • PHP教程centos7上编译安装php7以php-fpm方式连接apache

    centos7上编译安装php7以php-fpm方式连接apache

    这篇文章主要介绍了centos7上编译安装php7以php-fpm方式连接apache的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...

    明天_意外4232019-08-29
  • PHP教程PHP中使用cURL实现Get和Post请求的方法

    PHP中使用cURL实现Get和Post请求的方法

    PHP中使用cURL实现Get和Post请求的方法,需要的朋友可以参考一下...

    脚本之家2542019-05-29
  • PHP教程浅析PHP数据导出知识点

    浅析PHP数据导出知识点

    本文是小编整理的关于PHP数据导出知识点的总结内容,分析了经常出现的问题,以及解决办法,有兴趣的朋友可以参考学习下。 ...

    laozhang3042019-10-21
  • PHP教程thinkPHP框架动态配置用法实例分析

    thinkPHP框架动态配置用法实例分析

    这篇文章主要介绍了thinkPHP框架动态配置用法,结合实例形式分析了thinkPHP3.0之前的动态配置操作技巧及缓存相关操作注意事项,需要的朋友可以参考下 ...

    1O(∩_∩)O12322019-09-25
  • PHP教程ThinkPHP防止重复提交表单的方法实例分析

    ThinkPHP防止重复提交表单的方法实例分析

    这篇文章主要介绍了ThinkPHP防止重复提交表单的方法,结合实例形式分析了thinkPHP防止重复提交表单的各种常见操作技巧与相关注意事项,需要的朋友可以参考...

    Jack小火苗1272019-10-08
  • PHP教程php无限级评论嵌套实现代码

    php无限级评论嵌套实现代码

    本文讲的是php无限级评论嵌套实例介绍, 我在设计BB的过程中,也一直在思考是否可以不通过递归来实现无限级分类的结构展现和父子结构查找,因为如果...

    mdxy-dxy5072019-10-12