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

本文介绍了如何从上往下,同层从左至右打印二叉树的节点。通过使用队列,先将根节点入队,然后循环遍历队列,每次取出节点并访问其左右子节点,依次加入队列,直至队列为空,实现层次遍历。
摘要由CSDN通过智能技术生成
问题描述:传入根节点,从上往下打印出二叉树的每个节点,同层节点从左至右打印。

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

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均没有子节点,因此遍历完成。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值