php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误)...
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实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误)...相关推荐
- 《剑指offer》-- 二叉树的下一个结点、对称二叉树、按之字性顺序打印二叉树、把二叉树打印成多行
一.二叉树的下一个结点: 1.题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 2.解题思路: 分析二叉树 ...
- 剑指offer——面试题60:把二叉树打印成多行
剑指offer--面试题60:把二叉树打印成多行 Solution1: 20180911重做.经典题目.牢记做法! /* struct TreeNode {int val;struct TreeNod ...
- 剑指offer编程试题Java实现--60.把二叉树打印成多行
个人博客:小景哥哥 60.把二叉树打印成多行 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. import java.util.ArrayList; import java ...
- 剑指offer(C++)-JZ78:把二叉树打印成多行(数据结构-树)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从 ...
- 剑指Offer(Java实现)把二叉树打印成多行
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 解题思路 利用辅助空间链表或队列来存储节点,每层输出. 代码实现 import java.util.ArrayList; i ...
- 《剑指offer》把二叉树打印成多行
题目:从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 解析:层次遍历二叉树,要点是要用队列存储节点信息.还有个问题,如何知道要换层?答案是用一个计数器current指示当前层的节点个 ...
- 剑指offer:二叉树打印成多行(层次遍历)
1. 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 2. 思路 层次遍历 3. 递归 public class Solution {ArrayList<ArrayL ...
- 剑指offer之把二叉树打印成多行
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 解题思路 二叉树的层次序遍历即可,注意vector的边界条件 AC代码 class Solution {public:vec ...
- 剑指offer面试题[60]-将二叉树打印成多行
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. /* struct TreeNode {int val;struct TreeNode *left;struct TreeN ...
- 【剑指Offer】60、把二叉树打印成多行
题目描述: 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 解题思路: 本题可类比第22题:从上往下打印二叉树,这两道题实际上是一回事,只不过这里我们多了一个分行打印 ...
最新文章
- 简述sed、grep和parted的速查表
- python百题百练 二级题目_CSDN Python语感百题(一)
- rip协议中周期性广播路由信息的报文_距离矢量路由协议(RIP)
- 【Ogre-windows】旋转矩阵及位置解析
- STM32那点事之构建工程模板
- 一次Nginx负载均衡的安装与配置
- 基于STM32-HAL库的直流电机控制
- “大胃王”吃播注意了 国家明确禁止发布量大多吃、暴饮暴食等节目
- 使用Kubeadm(1.13+)快速搭建Kubernetes集群
- 一线互联网架构师设计思想解读开源框架!全套教学资料
- java冒泡怎么写_java 冒泡 又一种写法
- ScriptManager EnablePageMethods 与 JSON 序列化
- Cisco简单配置(十三)—链路聚合
- MySQL主从复制-基于binlog
- [转]破解无线路由器密码
- iPhone屏幕尺寸(包含7p)
- 使用IDEA生成DOC文档
- [!] CocoaPods was not able to update the `xxx` repo. If this is an unexpected issue and persists
- 线性回归预时间序列预测
- 遥感影像语义分割数据集
热门文章
- win7 uefi 无法对计算机,U盘UEFI模式无法启动WIN7安装解决教程
- No handler found for OPTIONS /lca/lcaplan/lcaplanprocess/list
- 基于Echarts的数据可视化大屏系统设计分享
- Win10 快捷键大全(史上最全)
- Linux终端界面Screen实现桌面共享
- linux 查看gc情况
- 用计算机如何算行列式,数学计算器使用操作步骤
- 差异表达基因变化倍数_【其他】差异基因筛选方法
- 如何处理计算机显卡故障,显卡出现故障怎么办
- 电子信息业取得长足发展 效益与质量同步提升