码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode102 Binary Tree Level Order Traversal Java

时间:2016-04-26 21:57:18      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

题目:
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]
]

分析:
层次遍历二叉树,就是首先访问二叉树的第一层元素,再访问第二层,接着访问第三层,以此类推。实现的方式是,用一个先进先出的队列作为辅助数据结构,用levelList保存每一层的元素,用resultList保存所有的levelList,然后
(1)把根节点入队列,并把一个哨兵节点入队列,哨兵节点用于标识某一层已经结束
(2)当队列中元素个数大于1时(除哨兵节点外还有其它元素),进入循环。访问该元素,如果该元素为哨兵节点,则说明这一层已经结束了,并将一个哨兵节点入队,用于标识下一层结束的地方,把levelList存入resultList,并建一个新的levelList保存下一层的元素;否则,把该节点的值放进levelList,并把它不为null的孩子节点入队。
(3)把levelList加入resultList。因为最后一个哨兵节点没有办法被访问到,导致保存最后一层元素的levelList没办法在循环中被添加进resultList。

具体的代码如下:

package global;

public class TreeNode {
    public int val;
    public TreeNode left;
    public TreeNode right;

    public TreeNode(int x) {
        val = x;
    }

    @Override
    public String toString() {
        return "TreeNode [val=" + val + ", left=" + left + ", right=" + right
                + "]";
    }

}
package leetcode102;

import global.TreeNode;

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

/**
 * Created by liyuncong on 10/22/15.
 */
public class LeetCode102 {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> resultList = new ArrayList<List<Integer>>();
        if (root == null) {
            return resultList;
        }

        List<Integer> levelStorage = new LinkedList<Integer>();
        LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(root);
        queue.offer(null);
        while (queue.size() > 1) {
            TreeNode top = queue.poll();
            if (top == null) {
                resultList.add(levelStorage);
                queue.offer(null);
                levelStorage = new LinkedList<Integer>();
            } else {
                levelStorage.add(top.val);
                if (top.left != null) {
                    queue.offer(top.left);
                }
                if (top.right != null) {
                    queue.offer(top.right);
                }
            }
        }
        resultList.add(levelStorage);

        return resultList;
    }
}

LeetCode102 Binary Tree Level Order Traversal Java

标签:

原文地址:http://blog.csdn.net/l294265421/article/details/51226156

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!