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

一、总结

要点:a、层次遍历(队列)  b、层次遍历中的层次(孩子在父亲的层次上面加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 }

转载于:https://www.cnblogs.com/Renyi-Fan/p/9068535.html

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

  1. 《剑指offer》-- 二叉树的下一个结点、对称二叉树、按之字性顺序打印二叉树、把二叉树打印成多行

    一.二叉树的下一个结点: 1.题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 2.解题思路: 分析二叉树 ...

  2. 剑指offer——面试题60:把二叉树打印成多行

    剑指offer--面试题60:把二叉树打印成多行 Solution1: 20180911重做.经典题目.牢记做法! /* struct TreeNode {int val;struct TreeNod ...

  3. 剑指offer编程试题Java实现--60.把二叉树打印成多行

    个人博客:小景哥哥 60.把二叉树打印成多行 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. import java.util.ArrayList; import java ...

  4. 剑指offer(C++)-JZ78:把二叉树打印成多行(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从 ...

  5. 剑指Offer(Java实现)把二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 解题思路 利用辅助空间链表或队列来存储节点,每层输出. 代码实现 import java.util.ArrayList; i ...

  6. 《剑指offer》把二叉树打印成多行

    题目:从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 解析:层次遍历二叉树,要点是要用队列存储节点信息.还有个问题,如何知道要换层?答案是用一个计数器current指示当前层的节点个 ...

  7. 剑指offer:二叉树打印成多行(层次遍历)

    1. 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 2. 思路 层次遍历 3. 递归 public class Solution {ArrayList<ArrayL ...

  8. 剑指offer之把二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 解题思路 二叉树的层次序遍历即可,注意vector的边界条件 AC代码 class Solution {public:vec ...

  9. 剑指offer面试题[60]-将二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. /* struct TreeNode {int val;struct TreeNode *left;struct TreeN ...

  10. 【剑指Offer】60、把二叉树打印成多行

      题目描述:   从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行.   解题思路:   本题可类比第22题:从上往下打印二叉树,这两道题实际上是一回事,只不过这里我们多了一个分行打印 ...

最新文章

  1. 简述sed、grep和parted的速查表
  2. python百题百练 二级题目_CSDN Python语感百题(一)
  3. rip协议中周期性广播路由信息的报文_距离矢量路由协议(RIP)
  4. 【Ogre-windows】旋转矩阵及位置解析
  5. STM32那点事之构建工程模板
  6. 一次Nginx负载均衡的安装与配置
  7. 基于STM32-HAL库的直流电机控制
  8. “大胃王”吃播注意了 国家明确禁止发布量大多吃、暴饮暴食等节目
  9. 使用Kubeadm(1.13+)快速搭建Kubernetes集群
  10. 一线互联网架构师设计思想解读开源框架!全套教学资料
  11. java冒泡怎么写_java 冒泡 又一种写法
  12. ScriptManager EnablePageMethods 与 JSON 序列化
  13. Cisco简单配置(十三)—链路聚合
  14. MySQL主从复制-基于binlog
  15. [转]破解无线路由器密码
  16. iPhone屏幕尺寸(包含7p)
  17. 使用IDEA生成DOC文档
  18. [!] CocoaPods was not able to update the `xxx` repo. If this is an unexpected issue and persists
  19. 线性回归预时间序列预测
  20. 遥感影像语义分割数据集

热门文章

  1. win7 uefi 无法对计算机,U盘UEFI模式无法启动WIN7安装解决教程
  2. No handler found for OPTIONS /lca/lcaplan/lcaplanprocess/list
  3. 基于Echarts的数据可视化大屏系统设计分享
  4. Win10 快捷键大全(史上最全)
  5. Linux终端界面Screen实现桌面共享
  6. linux 查看gc情况
  7. 用计算机如何算行列式,数学计算器使用操作步骤
  8. 差异表达基因变化倍数_【其他】差异基因筛选方法
  9. 如何处理计算机显卡故障,显卡出现故障怎么办
  10. 电子信息业取得长足发展 效益与质量同步提升