从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路: 层次遍历;
import java.util.ArrayList;
import java.util.Queue; // 此处增加了一个Queue
import java.util.LinkedList; // 此处增加一个 LinkedList
/**
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) {
//创建一个类型为TreeNode 的队列, 另外创建一个类型为Integer的ArrayList用于存放结果
Queue<TreeNode> q = new LinkedList <> ();
ArrayList<Integer> res = new ArrayList<> ();
if(root == null) return res; // 注意此处的res是一个空数组
q.offer(root); // q.offer() 是队列的一个方法,表示向队列尾部添加元素
while(! q.isEmpty()) {
TreeNode cur = q.poll(); // q.poll()表示从队列头部删除数据
res.add(cur.val); // q.add() 也是队列的一个方法,表示向队列尾部添加元素
if(cur.left != null) {q.offer(cur.left);}
if(cur.right != null) {q.offer(cur.right);}
}
return res;
}
}
引用:
Queue的add()和offer()及remove()和poll()的区别
https://blog.csdn.net/qq_44837912/article/details/104165789
一. add()方法和offer()方法
二者均是向队列尾部添加元素;
当超出队列界限的时,add()方法会抛出异常,offer()方法会返回false。
二. remove()方法和poll()方法
二者均是从队列头部删除元素;
当超出队列界限的时,remove()方法会抛出异常,poll()方法会返回null。
如下的代码是用了 Deque双端队列 (源于 https://blog.nowcoder.net/n/5360d81e35ad40ae85379261992b4049)
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
/**
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) {
Deque<TreeNode> deque = new LinkedList<>();
ArrayList<Integer> res = new ArrayList<>();
if(root == null)
return res;
deque.add(root);
while(!deque.isEmpty()){
TreeNode node = deque.getFirst();
deque.pollFirst();
res.add(node.val);
if(node.left != null)
deque.addLast(node.left);
if(node.right != null)
deque.addLast(node.right);
}
return res;
}
}
引用:
Queue和Deque的区别?
https://blog.csdn.net/uz31415926/article/details/99118686
Queue是队列,Deque是双端队列。
public interface Deque<E> extends Queue<E> {
方法上的区别如下:
Queue | Deque |
---|---|
add | addFirst |
offer | offerFirst |
remove | removeFirst |
poll | pollFirst |
element | getFirst |
peek | peekFirst |