• LeetCode | Binary Tree Level Order Traversal II


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

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

        3
       / 
      9  20
        /  
       15   7
    

    return its bottom-up level order traversal as:

    [
      [15,7],
      [9,20],
      [3]
    ]
    

     

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
     //与层序遍历的思想一模一样,唯一差别是在添加thisLevelList到result时使用addFirst添加到头位置,而不是用add()顺序添加
     //遍历顺序[3] [9,20] [15,7] add之后->      { [3] [9,20] [15,7] } 
     //遍历顺序[3] [9,20] [15,7] addFirst之后-> { [15,7] [9,20] [3] } 正好符合题意要求
    public class Solution {
        public List<List<Integer>> levelOrderBottom(TreeNode root) {
            LinkedList<List<Integer>> result = new LinkedList<List<Integer>>();  //注意result的类型是LinkedList<List<Integer>>,
            if(root==null) return result;                        //而不能是List<List<Integer>>,不然向上转型时会把addFirst()方法转没
            
            Queue<TreeNode> nodeQueue = new LinkedList<TreeNode>();
            nodeQueue.add(root);
            TreeNode nextLevelStarter;
            
            while(!nodeQueue.isEmpty()){
                List<Integer> thisLevelList = new LinkedList<Integer>();
                nextLevelStarter = null;
                
                while(nodeQueue.isEmpty()==false && nodeQueue.peek()!=nextLevelStarter){
                    TreeNode curNode = nodeQueue.remove();
                    thisLevelList.add(curNode.val);
                    if(curNode.left!=null) nodeQueue.add(curNode.left);
                    if(curNode.right!=null) nodeQueue.add(curNode.right);
                    
                    if(nextLevelStarter==null){
                        if(curNode.left!=null){
                            nextLevelStarter = curNode.left;
                        }else if(curNode.right!=null){
                            nextLevelStarter = curNode.right;
                        }
                    }
                }
                
                result.addFirst(thisLevelList);     //与层序遍历代码唯一的差别!!!!!!
            }                                       
            return result;
        }
    }



  • 相关阅读:
    Docker的安装、配置及其基本使用
    Java提升七:注解
    Java提升六:泛型
    Java提升五:反射与动态代理
    MySQL中如何将主键默认值设为UUID()
    图解Mybatis框架原理及使用
    Java提升四:Stream流
    Java提升三:函数式接口
    Java提升二:Lambda表达式与方法引用
    java提升一:内部类
  • 原文地址:https://www.cnblogs.com/dosmile/p/6444467.html
Copyright © 2020-2023  润新知