`
blue2048
  • 浏览: 178183 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[leetcode]Binary Tree Level Order Traversal - java 树层遍历技巧

阅读更多

广度遍历的基础上,再使用是个集合存储下一层节点,在队列进元素的时机上做出一些改变,就能达到层级遍历树的效果

 

/**

 * Definition for binary tree

 * public 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>> result = new ArrayList<List<Integer>>();

        if(root == null){

            return result;

        }

        List<Integer> first = new ArrayList<Integer>();

        first.add(root.val);

        result.add(first);



        LinkedList<TreeNode> queue = new LinkedList<TreeNode>();

        LinkedList<TreeNode> childrenQueue = new LinkedList<TreeNode>();

        queue.add(root);

        while (!queue.isEmpty()) {

            TreeNode node = queue.remove();

            if(node.left!=null){

                childrenQueue.add(node.left);

            }

            if(node.right!=null){

                childrenQueue.add(node.right);

            }

            if(queue.isEmpty() && !childrenQueue.isEmpty()){

                List<Integer> childrenResult = new ArrayList<Integer>(childrenQueue.size());

                for(TreeNode child : childrenQueue){

                    queue.add(child);

                    childrenResult.add(child.val);

                }

                result.add(childrenResult);

                childrenQueue.clear();

            }

        }

        return result;

    }

}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics