题目:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
很明显,这道题目就是树的顺序遍历(个人喜欢这么说)也叫层次遍历
首先看下层次遍历的特点:
当然,并不只有这一种解法,更多的解法大家也可以在评论留言呀~
上代码
import java.util.ArrayList;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
TreeNode root = new TreeNode(1);
TreeNode right = new TreeNode(3);
TreeNode left = new TreeNode(2);
TreeNode left1 = new TreeNode(4);
TreeNode right2 = new TreeNode(5);
root.left = left;
root.right = right;
left.right = right2;
right.left = left1;
solution.PrintFromTopToBottom(root).forEach(System.out::print);
}
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<>();
if(root == null){
return list;
}
// ---------------------------核心代码-------------------------
Queue<TreeNode> queue = new LinkedBlockingQueue<>();
queue.add(root);
while (!queue.isEmpty()){
TreeNode peek = queue.remove();
list.add(peek.val);
// 利用队列先进先出的特性,依次将节点放入队列中,供后续消费
if(peek.left != null){
queue.add(peek.left);
}
if(peek.right != null){
queue.add(peek.right);
}
}
// -----------------------------------------------------------
return list;
}
}
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}