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]
    ]
    

    confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

    Solution:

     1 /**
     2  * Definition for binary tree
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public List<List<Integer>> levelOrderBottom(TreeNode root) {
    12         List<List<Integer>> res = new ArrayList<List<Integer>>();
    13         if (root==null)
    14             return res;
    15         
    16         //Visit all node by using BFS.
    17         List<TreeNode> queue = new ArrayList<TreeNode>();
    18         List<Integer> depth = new ArrayList<Integer>();
    19         queue.add(root);
    20         depth.add(1);
    21         int index = 0;
    22         int curDepth = -1;
    23         TreeNode curNode = null;
    24         while (index<queue.size()){
    25             curNode = queue.get(index);
    26             curDepth = depth.get(index);
    27             if (curNode.left!=null){
    28                 queue.add(curNode.left);
    29                 depth.add(curDepth+1);
    30             }
    31             
    32             if (curNode.right!=null){
    33                 queue.add(curNode.right);
    34                 depth.add(curDepth+1);
    35             }
    36             
    37             index++;
    38         }
    39         
    40         //Get the max depth, which is the number of lists in the result.
    41         int maxDepth = depth.get(depth.size()-1);
    42         for (int i=0;i<maxDepth;i++)
    43             res.add(new ArrayList<Integer>());
    44         
    45         //Put the value of each node into the corresponding list in the result.
    46         for (int i=0;i<queue.size();i++){
    47             curNode = queue.get(i);
    48             curDepth = depth.get(i);
    49             index = maxDepth-curDepth;
    50             List<Integer> tempList = res.get(index);
    51             tempList.add(curNode.val);
    52         }
    53         
    54         return res;
    55     }
    56 }

    Using BFS to visit and record every tree node and its depth. Then put the value in each tree node into corresponding level list.

  • 相关阅读:
    google 语音识别返回,
    如果到来,会是怎样情况,fuck,
    sql
    阅读《一》
    阅读,
    Codevs 1078 ==Poj 1258 Agri-Net
    洛谷 P3399 丝绸之路
    线段树-代码实现细节与技巧
    Codevs 1371 浴火银河跑运输
    POJ 3267 The Cow Lexicon
  • 原文地址:https://www.cnblogs.com/lishiblog/p/4084327.html
Copyright © 2011-2022 走看看