题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路:这就是一个二叉树的层序遍历,借用一个队列来实现。
将二叉树的根节点放在队列里,然后从队列里取节点作为当前节点,如果当前节点的左节点不为null,则将左节点入队,然后判断右节点,如果当前节点的右节点不为null则入队。
举个栗子
首先,我们把1入队,
然后从队列中拿1,把1放入集合中,1的左子树是2,所以我们将2入队列,此时集合中的值:1 队列中没有值(因为我们把1拿出来了)
1的右子树是3,我们把3再入队列, 队列中的值为 2,3
我们接着取队列的头2,把2放入集合中,2的左子树是4,把4放入队列, 队列中的值为 3,4 集合中的值为1,2
2的右子树是5,把5放入队列, 队列中的值为 3,4,5
我们接着取队列的头3,把3放入集合中,3的左子树是6,把6放入队列, 队列中的值为 4,5,6 集合中的值为1,2,3
3的右子树是7,把7放入队列, 队列中的值为 4,5,6,7
我们接着取队列的头4,把4放入集合中,4的左子树是null,右子树也是null,所以我们接着从队列中取, 队列中的值为 5,6 集合中的值为1,2,3,4
我们接着取队列的头5,把5放入集合中,5的左子树是null,右子树也是null,所以我们接着从队列中取, 队列中的值为 6 集合中的值为1,2,3,4,5
我们接着取队列的头6,把6放入集合中,6的左子树是null,右子树也是null,所以我们接着从队列中取, 队列中的值没了,集合中的值为1,2,3,4,5,6
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<Integer>();
if(root==null)
{
return list ;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
while(!queue.isEmpty())
{
TreeNode node = queue.poll();
list.add(node.val);
if(node.left!=null)
{
queue.add(node.left);
}
if(node.right!=null)
{
queue.add(node.right);
}
}
return list;
}