LeetCode题目:从上到下打印节点

本文介绍了一种从上到下、从左到右遍历二叉树的方法,通过使用队列实现节点的层次遍历,并提供了Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],

返回:
[3,9,20,15,7]
提示:

节点总数 <= 1000

解题思路:

以题目中的例子来说明,首先拿到的第一个节点应该是根节点,然后是根节点的左节点,再右节点,然后到第三层,根节点的左节点的左节点,根节点的左节点的右节点,然后是根节点的右节点的左节点,根节点的右节点的右节点……可以看出,一个节点的遍历顺序是先根节点,再左节点,然后右节点,如果用一个容器来装这些节点,开始容器里只有一个根节点,遍历了根节点之后,又往容器里添加了根节点的左右节点,然后再遍历到根节点的左节点,如果这个节点有子节点,再把它的子节点放进容器……可以推出,遍历节点的顺序就是进入容器的顺序,按照先进先访问的顺序遍历,符合对了Queue的特点。使用Queue的时候,访问完一个节点就往外丢一个节点,到最后如果Queue中没有节点了,说明遍历了全部的节点。

代码(Java):

package levelOrder_32;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class Solution {
	public static void main(String[] args) {
		TreeNode root = new TreeNode(8);
		root.left = new TreeNode(6);
		root.right = new TreeNode(10);
		root.left.left = new TreeNode(5);
		root.left.right = new TreeNode(7);
		root.right.left = new TreeNode(9);
		root.right.right = new TreeNode(11);
		int[] ans = levelOrder(root);
		for(int i = 0; i<ans.length;i++){
			System.out.print(ans[i] + "\t");
		}
	}
	
	public static int[] levelOrder(TreeNode root){
		if(root == null) return new int[0];
		List<Integer> list = new ArrayList<Integer>();  //用于存放由上到下遍历到的节点的值
		Queue<TreeNode> queue = new LinkedList<>();  //由上到下遍历,满足先进先出的特点,用Queue来做
		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);
			}
		}
		int[] ans = new int[list.size()];  //将list转化为数组,返回数组
		for(int i = 0;i<list.size();i++){
			ans[i] = list.get(i);
		}
		return ans;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值