php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误

一、总结

要点:a、层次遍历(队列)  b、层次遍历中的层次(孩子在父亲的层次上面加1)

另外一种:

  1. 1、求每一层的时候:用的是计算开始时当前队列中元素的个数,用两层while

谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误

二、php实现把二叉树打印成多行

题目描述:

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

三、代码

代码一:

  1. 链接:https://www.nowcoder.com/questionTerminal/445c44d982d04483b04a54f298796288
  2. 来源:牛客网
  3.  
  4. 层次遍历
  5.  
  6. class Solution {
  7. public:
  8.         vector<vector<int> > Print(TreeNode* pRoot) {
  9.             vector<vector<int> > vec;
  10.             if(pRoot == NULL) return vec;
  11.  
  12.             queue<TreeNode*> q;
  13.             q.push(pRoot);
  14.  
  15.             while(!q.empty())
  16.             {
  17.                 int lo = 0, hi = q.size();
  18.                 vector<int> c;
  19.                 while(lo++ < hi)
  20.                 {
  21.                     TreeNode *t = q.front();
  22.                     q.pop();
  23.                     c.push_back(t->val);
  24.                     if(t->left) q.push(t->left);
  25.                     if(t->right) q.push(t->right);
  26.                 }
  27.                 vec.push_back(c);
  28.             }
  29.             return vec;
  30.         }
  31. };
  1. <?php
  2.  
  3. /*class TreeNode{
  4. var $val;
  5. var $left = NULL;
  6. var $right = NULL;
  7. function __construct($val){
  8. $this->val = $val;
  9. }
  10. }*/
  11. function MyPrint($pRoot)
  12. {
  13. // write code here
  14. $q = new SplQueue();
  15. if(!$pRoot){
  16. return [];
  17. }
  18. $result = []; //1、$result[$i][]
  19. $i=0;
  20. $q->push($pRoot);
  21. while(!$q->isEmpty()){
  22. $count = $q->count(); //1、求每一层的时候:用的是计算开始时当前队列中元素的个数,用两层while
  23. while($count--){
  24. $t = $q->shift();
  25. if($t){
  26. $result[$i][] = $t->val;
  27. $q->push($t->left);
  28. $q->push($t->right);
  29. }
  30. }
  31. $i++;
  32. }
  33. return $result;
  34. }

代码二:谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误

  1. <?php
  2.  
  3. /*class TreeNode{
  4. var $val;
  5. var $left = NULL;
  6. var $right = NULL;
  7. function __construct($val){
  8. $this->val = $val;
  9. }
  10. }*/
  11. //算法:树的层次遍历(队列
  12. //这里每层一行输出,所以需要判断层次,所以每个节点加一个遍历判断层次即可
  13. function MyPrint($pRoot){
  14. if(!$pRoot) return [];
  15. $preCenci=1;
  16. $ansLine=array();
  17. $ans=array();
  18. $queue=array();//队列
  19. $queCenci=array();//队列层次
  20. array_push($queCenci,1);
  21. array_push($queue,$pRoot);
  22. while(!empty($queue)){
  23. $node=array_shift($queue);
  24. $cenci=array_shift($queCenci);
  25. if($cenci!=$preCenci){
  26. $ans[]=$ansLine;
  27. $ansLine=array();
  28. $ansLine[]=$node->val;
  29. $preCenci=$cenci;
  30. }else{
  31. $ansLine[]=$node->val;
  32. $preCenci=$cenci;
  33. }
  34. if($node->left) { array_push($queue,$node->left); array_push($queCenci,$cenci+1);}
  35. if($node->right) { array_push($queue,$node->right); array_push($queCenci,$cenci+1);} //1、这里写成了$queue
  36. }
  37. return $ans; //2、函数里面就是return,而不是echo
  38. }

php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误)的更多相关文章

  1. 剑指Offer:二叉树打印成多行【23】

    剑指Offer:二叉树打印成多行[23] 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目分析 Java题解 package tree; import java.uti ...

  2. 把二叉树打印成多行 牛客网 剑指Offer

    把二叉树打印成多行 牛客网 剑指Offer 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行 # class TreeNode: # def __init__(self, x) ...

  3. 【剑指Offer】把二叉树打印成多行 解题报告(Python)

    [剑指Offer]把二叉树打印成多行 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  4. JZ-060-把二叉树打印成多行

    把二叉树打印成多行 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目链接: 把二叉树打印成多行 代码 import java.util.ArrayList; impor ...

  5. 剑指offer系列——59/60.按之字形顺序打印二叉树/把二叉树打印成多行

    Q:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. A:BFS,偶数层reverse vector&l ...

  6. 剑指offer从上往下打印二叉树 、leetcode102. Binary Tree Level Order Traversal(即剑指把二叉树打印成多行、层序打印)、107. Binary Tree Level Order Traversal II 、103. Binary Tree Zigzag Level Order Traversal(剑指之字型打印)

    从上往下打印二叉树这个是不分行的,用一个队列就可以实现 class Solution { public: vector<int> PrintFromTopToBottom(TreeNode ...

  7. 剑指offer系列33-----把二叉树打印成多行

    [题目]从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 方法一:直接打印 package com.exe7.offer; import java.util.LinkedList; i ...

  8. 剑指Offer-把二叉树打印成多行

    package Tree; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; /** * ...

  9. 剑指offer(60)把二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目分析 从上到下打印二叉树我们知道用队列可以实现,但是如果多行打印怎么做呢? 我们需要分割,在行与行之间进行分割.如何分割 ...

随机推荐

  1. Android图片处理——压缩、剪裁、圆角、保存

    点击查看原文 项目中用到的关于图片的处理 public class UtilPicture { public static final String IMAGE_UNSPECIFIED = " ...

  2. javaEE之------Spring-----》 AspectJ注解

    前面介绍了下Spring中的切面技术.如今说下採用注解的方式进行切面 首先肯定和之前的一样.须要一个自己主动代理的注解类 AnnotationAwareAspectJAutoProxyCreator ...

  3. Centos 6.8 安装 Protocol Buffers , v3.2.0有 BUG ,安装 3.1.0

    Centos 6.8 安装 Protocol Buffers   , v3.2.0有 BUG ,安装 3.1.0 切换到用户目录 cd ~ 安装 python2.7,须加入zlib wget http ...

  4. javascript创建对象的方法--动态原型模式

    javascript创建对象的方法--动态原型模式 一.总结 1.作用:解决组合模式的属性和函数分离问题  2.思路:基本思路和组合模式相同:共用的函数和属性用原型方式,非共用的的函数和属性用构造函数 ...

  5. Bitmap Image Graphics

    Bitmap Image  Graphics private void DrawImagePointF(PaintEventArgs e){ // Create image.    Image new ...

  6. Reentrant 可重入解释

    作者:知乎用户链接:https://www.zhihu.com/question/37168009/answer/88086943来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  7. 【2017 Multi-University Training Contest - Team 7】 Euler theorem

    [Link]:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1005&cid=765 [Description] 问你a ...

  8. Java 学习(16):集合框架

    Java 集合框架 早在Java 2中之前,Java就提供了特设类.比如:Dictionary, Vector, Stack,  Properties 这些类用来存储和操作对象组. 虽然这些类都非常有 ...

  9. jquery中prop()和attr()的使用

    jquery1.6+出现的prop()方法. • 对于HTML元素本身就带有的固有属性,在处理时,使用prop方法. • 对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法. • ...

  10. c#中反射的用法(即如何根据字符找到已定义的变量)

    2013-07-20 08:06 720人阅读 评论(0) 收藏 举报  分类: C#(9)  作者同类文章 X 版权声明:本文为博主原创文章,未经博主允许不得转载. 常常羡慕javascript中, ...