力扣T107二叉树的层次遍历--简单

9 篇文章 0 订阅
1 篇文章 0 订阅

在这里插入图片描述
题目

在这里插入图片描述
代码

package 力扣;
import java.util.*;
public class T107二叉树的层次遍历 {
	
	/**
	 * Definition for a binary tree node.
	 * public class TreeNode {
	 *     int val;
	 *     TreeNode left;
	 *     TreeNode right;
	 *     TreeNode(int x) { val = x; }
	 * }
	 */
	public static void main(String[] args) {
		//[3,9,20,null,null,15,7],
		//测试用例1 -- 力扣的例子 
		TreeNode node1 = new TreeNode(3); 
		TreeNode node2 = new TreeNode(9); 
		TreeNode node3 = new TreeNode(20); 
		TreeNode node4 = new TreeNode(15); 
		TreeNode node5 = new TreeNode(7); 
		node1.left = node2;
		node1.right = node3;
		node3.left = node4;
		node3.right = node5;
//      测试用例2   不要忘记输入的时候就是空值	
//		TreeNode node1 = null; 
		List<List<Integer>> list = levelOrderBottom(node1);
		System.out.println(list.toString());
	    
	}
	
	public static List<List<Integer>> levelOrderBottom(TreeNode root) {
		//最终答案
		List<List<Integer>> ans = new LinkedList<List<Integer>>();
		//队列用于广搜
		Queue<TreeNode> queue = new LinkedList<>();
		//存放每一层
		if(root!=null)
		queue.add(root);
		bfs(ans,queue);
		return ans;
		
    }

	private static void bfs(List<List<Integer>> ans, Queue<TreeNode> queue) {
		if(queue.isEmpty()) return;
		//合成这一层的node 的值组成<List<Integer>加入到ans
		List<Integer> list = new LinkedList<>();
		//通过上一层的队列来组成下一层的队列
		Queue<TreeNode> queue2 = new LinkedList<>();
		
		TreeNode node;
		while(!queue.isEmpty()) {
			
			//取队头
			 node = queue.poll();
			 
			//将这一层的所有val加入list
			list.add(node.val);
			
			if(node.left!=null) {
				//如果左节点存在将左节点加入下一层的队列
				queue2.add(node.left);
			}
			
			if(node.right!= null) {
				//如果右节点存在将右节点加入下一层的队列
				queue2.add(node.right);
			}
		}
		
		//广搜下一层
		bfs(ans,queue2);
		
		ans.add(list);	
	}  
}
class TreeNode {
	int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }     
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值