leetcode 102 ---Binary Tree Level Order Traversal java

本文介绍了一种使用队列实现的二叉树层次遍历算法,并提供了完整的Java实现代码。该算法能按从上到下、从左到右的顺序返回二叉树各层节点的值。

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3
   / \
  9  20
    /  \
   15   7

return its level order traversal as:

[
  [3],
  [9,20],
  [15,7]
]
java程序:

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

class TreeNode{
	int val;
	TreeNode left;
	TreeNode right;
	TreeNode(int x){val=x;}
}
public class Solution {
	public List<List<Integer>> levelOrder(TreeNode root){
		List<List<Integer>> answerList = new ArrayList<List<Integer>>();
		TreeNode nextLevelStarter;
		Queue<TreeNode> q = new LinkedList<TreeNode>();
		
		if(root==null)return answerList;
		
		q.add(root);
		
		while(!q.isEmpty()){
			List<Integer> thisLevelList = new ArrayList<Integer>();
			nextLevelStarter=null;
			
			//没有找到下一层的开始结点时,继续遍历
			while(q.peek()!=nextLevelStarter){
				TreeNode currentNode = q.remove();
				
				//如果nextLevelStarter值为空,说明还没找到下一层的起始节点
				//那么就查看当前遍历的节点的孩子是否为空,不为空就是下一层的起始节点
				if(nextLevelStarter==null){
					if(currentNode.left!=null){
						nextLevelStarter=currentNode.left;
					}else if(currentNode.right!=null){
						nextLevelStarter=currentNode.right;
					}
				}
				
				thisLevelList.add(currentNode.val);
				if(currentNode.left!=null){
					q.add(currentNode.left);
				}
				if(currentNode.right!=null){
					q.add(currentNode.right);
				}
			}
			answerList.add(thisLevelList);
		}
		return answerList;
	}
}
总结:平日应该多多应用数据结构,活学活用,想好思路慢慢练习自然不会觉得很困难了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值