美文网首页
LintCode - 二叉树的层次遍历(中等)

LintCode - 二叉树的层次遍历(中等)

作者: 柒黍 | 来源:发表于2017-09-22 18:52 被阅读0次

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    难度:中等
    要求:

    给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)

    样例:

    一个例子:

    给一棵二叉树 {3,9,20,#,#,15,7} :
      3
     / \
    9  20
      /  \
     15   7
    返回他的分层遍历结果:
    [
      [3],
      [9,20],
      [15,7]
    ]
    

    上述这棵二叉树序列化为 {2,1,4,#,#,3,5}.

    实现:
    /**
     * Definition of TreeNode:
     * public class TreeNode {
     *     public int val;
     *     public TreeNode left, right;
     *     public TreeNode(int val) {
     *         this.val = val;
     *         this.left = this.right = null;
     *     }
     * }
     */
    
    public class Solution {
        /*
         * @param root: A Tree
         * @return: Level order a list of lists of integer
         */
        public List<List<Integer>> levelOrder(TreeNode root) {
            //返回值
            List<List<Integer>> ret = new ArrayList<List<Integer>>();
            if (root == null) {
                return ret;
            }
    
            //当前行容器
            List<Integer> cell = new ArrayList<Integer>();
    
            LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
            queue.add(root);
    
            TreeNode last = root;//当前行的最后一个节点
            TreeNode nLast = root;//下一行的最后一个节点
    
            while (!queue.isEmpty()) {
                TreeNode node = queue.pop();
                //记录当前节点
                cell.add(node.val);
    
                if (node.left != null) {
                    queue.add(node.left);
                    nLast = node.left;
                }
    
                if (node.right != null) {
                    queue.add(node.right);
                    nLast = node.right;
                }
     
                //表示已经遍历到本行最后一个节点,要换行
                if (node == last) {
                    last = nLast;
                    ret.add(cell);
                    cell = new ArrayList<Integer>();
                }
            }
            
            return ret;
        }
    }
    

    相关文章

      网友评论

          本文标题:LintCode - 二叉树的层次遍历(中等)

          本文链接:https://www.haomeiwen.com/subject/fcofextx.html