zoukankan      html  css  js  c++  java
  • 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;
        }
    }



  • 相关阅读:
    2. 替换空格
    1.二维数组中的查找
    《STL源码剖析》相关面试题总结
    STL详解
    java之Stack详细介绍
    ArrayList、LinkedList、Vector的区别
    记一次vue升级element-ui的体验
    nestJs项目打包部署的方法
    Echarts 图例 legend formatter 如何返回 html
    微信小程序echarts字体大小 真机和开发者工具不一致(太小)的解决办法
  • 原文地址:https://www.cnblogs.com/dosmile/p/6444467.html
Copyright © 2011-2022 走看看