把二叉树打印成多行
来源:互联网 发布:杭州 软件开发 编辑:程序博客网 时间:2024/06/06 05:53
题目描述:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}
思路一:
import java.util.ArrayList;import java.util.LinkedList;public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); if (pRoot == null) return res; LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(pRoot); while (!queue.isEmpty()) { int start = 0; int end = queue.size(); ArrayList<Integer> list = new ArrayList<>(); while (start++ < end) { TreeNode node = queue.poll(); if (node != null) list.add(node.val); if (node.left != null) queue.add(node.left); if (node.right != null) queue.add(node.right); } res.add(list); } return res; }}
另一种写法:
import java.util.ArrayList;import java.util.LinkedList;public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); if (pRoot == null) return res; LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(pRoot); ArrayList<Integer> list =new ArrayList<>(); int start = 0; int end = 1; while (!queue.isEmpty()) { TreeNode node = queue.poll(); start++; if (node != null) list.add(node.val); if (node.left != null) queue.add(node.left); if (node.right != null) queue.add(node.right); if (start == end) { if (!list.isEmpty()) res.add(list); start = 0; end = queue.size(); list = new ArrayList<>(); } } return res; }}
思路二:
import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedList;public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); if (pRoot == null) return res; LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(null); queue.add(pRoot); ArrayList<Integer> list =new ArrayList<>(); while (queue.size() > 1) { TreeNode node = queue.poll(); if (node == null) { Iterator<TreeNode> iter = queue.iterator(); while (iter.hasNext()) list.add(iter.next().val); res.add(new ArrayList<>(list)); list.clear(); queue.add(null); continue; } if (node.left != null) queue.add(node.left); if (node.right != null) queue.add(node.right); } return res; }}
思路三:
两个队列交替打印
import java.util.ArrayList;import java.util.LinkedList;public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); if (pRoot == null) return res; LinkedList<TreeNode> q1 = new LinkedList<>(); q1.add(pRoot); LinkedList<TreeNode> q2 = new LinkedList<>(); while (!q1.isEmpty() || !q2.isEmpty()) { ArrayList<Integer> list = new ArrayList<>(); while (!q1.isEmpty()) { TreeNode tmp = q1.poll(); if (tmp != null) list.add(tmp.val); if (tmp.left != null) q2.add(tmp.left); if (tmp.right != null) q2.add(tmp.right); } if (!list.isEmpty()) { res.add(list); list = new ArrayList<>(); } while (!q2.isEmpty()) { TreeNode tmp2 = q2.poll(); if (tmp2 != null) list.add(tmp2.val); if (tmp2.left != null) q1.add(tmp2.left); if (tmp2.right != null) q1.add(tmp2.right); } if (!list.isEmpty()) { res.add(list); list = new ArrayList<>(); } } return res; }}
思路四:递归
import java.util.ArrayList;public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); if (pRoot == null) return res; depth(pRoot, 1, res); return res; } private void depth(TreeNode root, int depth, ArrayList<ArrayList<Integer>> lists) { if (root == null) return; if (depth > lists.size()) lists.add(new ArrayList<>()); lists.get(depth - 1).add(root.val); depth(root.left, depth + 1, lists); depth(root.right, depth + 1, lists); }}
阅读全文
0 0
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 把二叉树打印成多行
- 171206之在加载数据的时候加载操作
- 前端学习入门
- DevExpress控件GridControl开发常用要点(项目总结版)
- Android内存优化--OOM
- 高精(第一篇)
- 把二叉树打印成多行
- 将excel树形结构的数据导入数据库
- python基础学习(二)
- jsbc.properties
- angular2中 使用mqtt
- servlet生命周期
- 【java基础】15.I/O:序列化
- How to check memory leaks in android app?
- Maven学习笔记