题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路:
和“按之字形顺序打印二叉树”是一样的做法
我 是 用两个双端队列
尝试用一个双端队列 是不行的
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer> > res = new ArrayList<ArrayList<Integer> >();
//边界
if(null == pRoot) return res;
//该行的数字的开始和结束
int count = 1;
Deque<TreeNode> deque1 = new LinkedList<TreeNode>();
Deque<TreeNode> deque2 = new LinkedList<TreeNode>();
deque1.addLast(pRoot);
while(!deque1.isEmpty() || !deque2.isEmpty()){
ArrayList<Integer> tempList = new ArrayList<Integer>();
//把队列中的元素出队
if(!deque1.isEmpty()){
while(!deque1.isEmpty()){
TreeNode node = deque1.pollFirst();
tempList.add(node.val);
if(node.left != null) deque2.addLast(node.left);
if(node.right != null) deque2.addLast(node.right);
}
}else{
while(!deque2.isEmpty()){
TreeNode node = deque2.pollFirst();
tempList.add(node.val);
if(node.left != null) deque1.addLast(node.left);
if(node.right != null) deque1.addLast(node.right);
}
}
res.add(tempList);
count *= 2;
}
return res;
}
}
还有别人的方法,是用递归做的,感觉很妙
链接:https://www.nowcoder.com/questionTerminal/445c44d982d04483b04a54f298796288
来源:牛客网
//用递归做的
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
depth(pRoot, 1, list);
return list;
}
private void depth(TreeNode root, int depth, ArrayList<ArrayList<Integer>> list) {
if(root == null) return;
if(depth > list.size())
list.add(new ArrayList<Integer>());
list.get(depth -1).add(root.val);
depth(root.left, depth + 1, list);
depth(root.right, depth + 1, list);
}
}