1、从上往下打印出二叉树的每个节点,同层节点从左至右打印

来源:互联网 发布:mysql默认安装地址 编辑:程序博客网 时间:2024/05/16 04:53
问题描述:传入根节点,从上往下打印出二叉树的每个节点,同层节点从左至右打印。

解决思路:使用一个队列存放节点。先将根节点加入到队列中,然后循环遍历队列中的元素,遍历过程中,访问该节点的左右子节点,再将左右子节点加入到队列中。

public class Solution {       public ArrayList<TreeNode> PrintFromTopToBottom(TreeNode root) {           //创建一个列表用来存储节点          ArrayList<TreeNode> treeList=new ArrayList<TreeNode>();           if(root==null){//没有节点                return null;            }           //1、先存入根节点          treeList.add(root);         //2、循环遍历列表,一开始列表中只有根节点,因此size==1          for(int i=0;i<treeList.size();i++){               TreeNode node=  treeList.get(i);              //3、如果左子节点不为空,则将左子节点加入到列表中,这时列表的size加1              if(node.left!=null){                   treeList.add(node.left);                }                 //3、如果右子节点不为空,则将右子节点加入到列表中,这时列表的size加1               if(node.right!=null){ treeList.add(node.right);       }//4、因为执行上面操作后会增加列表的size,因此可以继续循环下一个节点,直到循环完所有节点 } return treeList; } }

如图所示二叉树:


1、首先将根节点加入到list中,因此此时list中数据为:  

1    

2、循环遍历列表:list.size = 1,i=0时获取到节点1,因为节点1有左子节点2,因此将左子节点2加入到list中,此时list.size = 2

12   

3、因为节点1有右子节点3,因此将右子节点3加入到list中,此时list.size=3

123  

4、因为list.size=3,因此可以进行下一次循环,i=1,获取到节点2,因为节点2有左子节点4,因此将左子节点4加入到list中,此时list.size=4

1234 

5、因为节点2有子右节点5,因此将右子节点5加入到list中,此时list.size=5

12345

6、继续循环遍历list,i=2,获取到节点3,因为节点3没有子节点,因此继续循环遍历list,因为节点45均没有子节点,因此遍历完成。


阅读全文
0 0
原创粉丝点击