题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
分析
- 思路一是用
arraylist
模拟一个队列来存储相应的TreeNode
- 思路二是直接调用
Java Queue
队列来存储对应的TreeNode
代码
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 {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> a= new ArrayList<Integer>();
ArrayList<TreeNode> q=new ArrayList<TreeNode>();
if(root == null)
return a;
q.add(root);
while(q.size()!=0){
TreeNode tmp=q.remove(0);
if(tmp.left!=null){
q.add(tmp.left);
}
if(tmp.right!=null){
q.add(tmp.right);
}
a.add(tmp.val);
}
return a;
}
}
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 {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> a= new ArrayList<Integer>();
Queue<TreeNode> q=new LinkedList<TreeNode>();
if(root == null)
return a;
q.offer(root);
while(q.size()!=0){
TreeNode tmp=q.poll();
if(tmp.left!=null){
q.offer(tmp.left);
}
if(tmp.right!=null){
q.offer(tmp.right);
}
a.add(tmp.val);
}
return a;
}
}
总结
- 可以轻松看出两个思路的大体方向是一样的。不过
Queue
接口和ArrayList
还是有很多不同
比如声明时Queue<TreeNode> q=new LinkedList<TreeNode>();
这是因为LinkedList
类实现了Queue
接口,因此我们可以把LinkedList
当成Queue
来用。 -
Queue
接口中还有一个需要注意的地方是 Queue的方法
老式的方法如add
、remove
、element
等,新的方法如offer
、poll
、peek
分别可以实现对应的功能,但是还可以避免抛出更多的异常,所以可以更多地去使用。
注:
Queue
方法中没有empty
,所以可以调用属性size
来进行判断
网友评论