60把二叉树打印成多行

题目描述

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


写成了平衡二叉树的程序。。。。。。。又没认真审题

复制代码
 1 public class Solution {
 2     ArrayList<ArrayList<Integer> > Print(TreeNode root) {
 3         Queue<TreeNode> queue = new LinkedList<TreeNode>();
 4         ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
 5         if(root ==null) return res;
 6         int layer = 0;
 7         queue.add(root);
 8         while(!queue.isEmpty()){
 9             ArrayList<Integer> restemp = new ArrayList<Integer>();
10                 while(restemp.size()<(1<<layer)){ //2的n次方 1<<n
11                     TreeNode node = queue.remove();
12                     restemp.add(node.val);
13                     if(node.left!=null) queue.add(node.left);
14                     if(node.right!=null) queue.add(node.right);
15                 }
16             layer++;
17             res.add(restemp);
18         }
19         return res;
20     }
21     
22 }
复制代码

 




用end 记录每层的节点数目

复制代码
 1 public class Solution {
 2     ArrayList<ArrayList<Integer> > Print(TreeNode root) {
 3         Queue<TreeNode> queue = new LinkedList<TreeNode>();
 4         ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
 5         ArrayList<Integer> restemp = new ArrayList<Integer>();
 6         if(root ==null) return res;
 7         int start = 0;
 8         int end = 1;
 9         queue.add(root);
10         while(!queue.isEmpty()){
11             TreeNode node = queue.remove();
12             restemp.add(node.val);
13             start++;
14             if(node.left!=null) queue.add(node.left);
15             if(node.right!=null) queue.add(node.right);
16             if(start==end){
17                 end = queue.size();//上层的大小
18                 res.add(restemp);
19                 restemp = new ArrayList<Integer>();
20                 start=0;
21             }
22         }
23         return res;
24     }
25     
26 }
复制代码

 

c++:20180730

 

复制代码
 1 /*
 2 struct TreeNode {
 3     int val;
 4     struct TreeNode *left;
 5     struct TreeNode *right;
 6     TreeNode(int x) :
 7             val(x), left(NULL), right(NULL) {
 8     }
 9 };
10 */
11 class Solution {
12 public:
13         vector<vector<int> > Print(TreeNode* pRoot) {
14 
15             vector<vector<int>> res ;
16             queue<TreeNode*> q;
17             if(pRoot==NULL) return res;
18             q.push(pRoot);
19             
20             int size ;
21             while(!q.empty()){
22                 vector<int> temp ;
23                 size = q.size();
24 
25                 for(int i = 0;i<size;i++){
26                     TreeNode* root = q.front();
27                     q.pop();
28                     temp.push_back(root->val);
29                     
30                     if(root->left!=NULL) q.push(root->left);
31                     if(root->right!=NULL) q.push(root->right);
32 
33                 }
34                 res.push_back(temp);
35             }
36             return res;
37         }
38     
39 };
复制代码

 

posted @   乐乐章  阅读(144)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
阅读排行:
· 支付宝事故这事儿,凭什么又是程序员背锅?有没有可能是这样的...
· https证书一键自动续期,帮你解放90天限制
· 在线客服系统 QPS 突破 240/秒,连接数突破 4000,日请求数接近1000万次,.NET 多
· 推荐几个不错的 Linux 服务器管理工具
· C# 开发工具Visual Studio 介绍
点击右上角即可分享
微信分享提示