php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误)
php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误)
一、总结
要点:a、层次遍历(队列) b、层次遍历中的层次(孩子在父亲的层次上面加1)
另外一种:
- 1、求每一层的时候:用的是计算开始时当前队列中元素的个数,用两层while
谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误
二、php实现把二叉树打印成多行
题目描述:
三、代码
代码一:
- 链接:https://www.nowcoder.com/questionTerminal/445c44d982d04483b04a54f298796288
- 来源:牛客网
- 层次遍历
- class Solution {
- public:
- vector<vector<int> > Print(TreeNode* pRoot) {
- vector<vector<int> > vec;
- if(pRoot == NULL) return vec;
- queue<TreeNode*> q;
- q.push(pRoot);
- while(!q.empty())
- {
- int lo = 0, hi = q.size();
- vector<int> c;
- while(lo++ < hi)
- {
- TreeNode *t = q.front();
- q.pop();
- c.push_back(t->val);
- if(t->left) q.push(t->left);
- if(t->right) q.push(t->right);
- }
- vec.push_back(c);
- }
- return vec;
- }
- };
- <?php
- /*class TreeNode{
- var $val;
- var $left = NULL;
- var $right = NULL;
- function __construct($val){
- $this->val = $val;
- }
- }*/
- function MyPrint($pRoot)
- {
- // write code here
- $q = new SplQueue();
- if(!$pRoot){
- return [];
- }
- $result = []; //1、$result[$i][]
- $i=0;
- $q->push($pRoot);
- while(!$q->isEmpty()){
- $count = $q->count(); //1、求每一层的时候:用的是计算开始时当前队列中元素的个数,用两层while
- while($count--){
- $t = $q->shift();
- if($t){
- $result[$i][] = $t->val;
- $q->push($t->left);
- $q->push($t->right);
- }
- }
- $i++;
- }
- return $result;
- }
代码二:谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误
- <?php
- /*class TreeNode{
- var $val;
- var $left = NULL;
- var $right = NULL;
- function __construct($val){
- $this->val = $val;
- }
- }*/
- //算法:树的层次遍历(队列
- //这里每层一行输出,所以需要判断层次,所以每个节点加一个遍历判断层次即可
- function MyPrint($pRoot){
- if(!$pRoot) return [];
- $preCenci=1;
- $ansLine=array();
- $ans=array();
- $queue=array();//队列
- $queCenci=array();//队列层次
- array_push($queCenci,1);
- array_push($queue,$pRoot);
- while(!empty($queue)){
- $node=array_shift($queue);
- $cenci=array_shift($queCenci);
- if($cenci!=$preCenci){
- $ans[]=$ansLine;
- $ansLine=array();
- $ansLine[]=$node->val;
- $preCenci=$cenci;
- }else{
- $ansLine[]=$node->val;
- $preCenci=$cenci;
- }
- if($node->left) { array_push($queue,$node->left); array_push($queCenci,$cenci+1);}
- if($node->right) { array_push($queue,$node->right); array_push($queCenci,$cenci+1);} //1、这里写成了$queue
- }
- return $ans; //2、函数里面就是return,而不是echo
- }
php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误)的更多相关文章
- 剑指Offer:二叉树打印成多行【23】
剑指Offer:二叉树打印成多行[23] 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目分析 Java题解 package tree; import java.uti ...
- 把二叉树打印成多行 牛客网 剑指Offer
把二叉树打印成多行 牛客网 剑指Offer 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行 # class TreeNode: # def __init__(self, x) ...
- 【剑指Offer】把二叉树打印成多行 解题报告(Python)
[剑指Offer]把二叉树打印成多行 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- JZ-060-把二叉树打印成多行
把二叉树打印成多行 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目链接: 把二叉树打印成多行 代码 import java.util.ArrayList; impor ...
- 剑指offer系列——59/60.按之字形顺序打印二叉树/把二叉树打印成多行
Q:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. A:BFS,偶数层reverse vector&l ...
- 剑指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 ...
- 剑指offer系列33-----把二叉树打印成多行
[题目]从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 方法一:直接打印 package com.exe7.offer; import java.util.LinkedList; i ...
- 剑指Offer-把二叉树打印成多行
package Tree; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; /** * ...
- 剑指offer(60)把二叉树打印成多行
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目分析 从上到下打印二叉树我们知道用队列可以实现,但是如果多行打印怎么做呢? 我们需要分割,在行与行之间进行分割.如何分割 ...
随机推荐
- Android图片处理——压缩、剪裁、圆角、保存
点击查看原文 项目中用到的关于图片的处理 public class UtilPicture { public static final String IMAGE_UNSPECIFIED = " ...
- javaEE之------Spring-----》 AspectJ注解
前面介绍了下Spring中的切面技术.如今说下採用注解的方式进行切面 首先肯定和之前的一样.须要一个自己主动代理的注解类 AnnotationAwareAspectJAutoProxyCreator ...
- 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 ...
- javascript创建对象的方法--动态原型模式
javascript创建对象的方法--动态原型模式 一.总结 1.作用:解决组合模式的属性和函数分离问题 2.思路:基本思路和组合模式相同:共用的函数和属性用原型方式,非共用的的函数和属性用构造函数 ...
- Bitmap Image Graphics
Bitmap Image Graphics private void DrawImagePointF(PaintEventArgs e){ // Create image. Image new ...
- Reentrant 可重入解释
作者:知乎用户链接:https://www.zhihu.com/question/37168009/answer/88086943来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- 【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 ...
- Java 学习(16):集合框架
Java 集合框架 早在Java 2中之前,Java就提供了特设类.比如:Dictionary, Vector, Stack, Properties 这些类用来存储和操作对象组. 虽然这些类都非常有 ...
- jquery中prop()和attr()的使用
jquery1.6+出现的prop()方法. • 对于HTML元素本身就带有的固有属性,在处理时,使用prop方法. • 对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法. • ...
- c#中反射的用法(即如何根据字符找到已定义的变量)
2013-07-20 08:06 720人阅读 评论(0) 收藏 举报 分类: C#(9) 作者同类文章 X 版权声明:本文为博主原创文章,未经博主允许不得转载. 常常羡慕javascript中, ...