【剑指Offer】把二叉树打印成多行
来源:互联网 发布:05年nba总决赛数据 编辑:程序博客网 时间:2024/04/29 16:09
题目描述
时间限制:1秒 空间限制:32768K
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
解题思路
前序遍历二叉树,对于每一层经过的结点总是从最左边的开始,然后才逐渐从左到右,其中可能经过不同层的结点,所以每一层做一下标记,不同层的结点添加到不同层的列表中。
例如
ArrayList<ArrayList<Integer>> ans;
那么,第d层的结点从左到右保存在ArrayList<Integer> arr = ans.get(d)
中。
代码(Java)
import java.util.ArrayList;import java.util.Collections;class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}public class Main { public static ArrayList<ArrayList<Integer>> ans; public static void dfs(TreeNode root, int d) { //第d层还没有结点,创建存放第d层结点的数组列表 while(ans.size()-1 < d) { ans.add(new ArrayList<Integer>()); } //将该节点加入到对应的第d层的数组列表中 ans.get(d).add(root.val); if(root.left != null)dfs(root.left, d+1); if(root.right != null)dfs(root.right, d+1); } public static ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) { ans = new ArrayList<ArrayList<Integer>>(); if(pRoot == null) return ans; ans.add(new ArrayList<Integer>()); dfs(pRoot, 0); //for(int i = 1; i <= ans.size(); i++) { //if((i&1) == 0) Collections.reverse(ans.get(i-1)); //} return ans; } /* 测试代码 */ public static void main(String []args){ TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.left.left = new TreeNode(4); root.left.right = new TreeNode(5); root.right = new TreeNode(3); root.right.left = new TreeNode(6); root.right.right = new TreeNode(7); ArrayList<ArrayList<Integer>> ans = Print(root); for(int i = 0; i < ans.size(); i++) { for(int a : ans.get(i))System.out.print(a+" "); System.out.println(); } }}
0 0
- 剑指offer--把二叉树打印成多行
- 《剑指offer》把二叉树打印成多行
- 剑指Offer--把二叉树打印成多行
- 剑指offer:把二叉树打印成多行
- 剑指offer:把二叉树打印成多行
- [剑指offer]把二叉树打印成多行
- 剑指offer|把二叉树打印成多行
- 【剑指Offer】把二叉树打印成多行
- 剑指offer 把二叉树打印成多行
- 《剑指offer》把二叉树打印成多行
- 剑指offer-把二叉树打印成多行
- 剑指offer--把二叉树打印成多行
- 剑指offer--把二叉树打印成多行
- 剑指offer-把二叉树打印成多行
- 剑指offer:把二叉树打印成多行
- 剑指offer 60 - 把二叉树打印成多行
- 剑指offer—把二叉树打印成多行
- 《剑指offer》——把二叉树打印成多行
- C语言中如何添加背景音乐
- 删除了目录卸载或安装出现Invalid drive错误
- pom.xml详解
- C++Primer第五版 第十二章习题答案(21~30)
- linux下的hadoop配置 sbin/start-all.sh datanode守护进程启动失败----解决方案
- 【剑指Offer】把二叉树打印成多行
- Mysql 破坏root 账户 修复
- k-th divisor_Codeforces
- phpstorm wampserver 图文教程搭建php开发环境 提供注册码
- POJ 2845 01000001 可能会
- Java异常机制的浅析(一)
- solrJ使用总结
- centos 修改linux主机名称
- Mahmoud and a Triangle_Codeforces