LeetCode 集錦(二十四) - 第 107 題 Binary Tree Level Order Traversal

問題

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,null,null,15,7], 3 / \ 9 20 / \ 15 7 return its bottom-up level order traversal as: [ [15,7], [9,20], [3] ] 複製代碼

翻譯:

給定一個二叉樹,返回其節點值的自底向上順序遍歷。(即從左到右,從葉到根,一層一層地)。node

例如: 給定二叉樹[3,9,20,null,null,15,7],git

3
 / \
9  20
  /  \
 15   7 
複製代碼

返回自底向上的順序遍歷,以下: [ [15,7], [9,20], [3] ]github


解題思路

本題是倒敘輸出一棵樹的層次,哎呦,不就是層級遍歷嘛,上一篇剛剛寫過,至於倒序,那就是小問題了。我們用linkedArrayList代替隊列(雖然是由這個實現的,可是沒有用到隊列的特色。因此直接用了list,這邊使用替換,代替了上次操做的remove,相對來講,效率會好一點數組

解題方法

  1. 按照層級遍歷的方式bash

    public List<List<Integer>> levelOrderBottom(TreeNode root) {
         if (root == null) {
             return new ArrayList<>();
         }
         List<List<Integer>> lists = new LinkedList<>();
         List<TreeNode> queue = new LinkedList<>();
         List<Integer> list = new ArrayList<>();
         list.add(root.val);
         lists.add(list);
         putNode(root, queue);
         while (queue.size() > 0) {
             List<Integer> resultTmep = new ArrayList<>();
             List<TreeNode> temp = new LinkedList<>();
             for (TreeNode treeNode : queue) {
                 resultTmep.add(treeNode.val);
                 putNode(treeNode, temp);
             }
             queue = temp;
             lists.add(0,resultTmep);
         }
         return lists;
    
    
     }
    
     private void putNode(TreeNode treeNode, List<TreeNode> list) {
    
         if (treeNode == null) {
             return;
         }
         if (treeNode.left != null) {
             list.add(treeNode.left);
         }
         if (treeNode.right != null) {
             list.add(treeNode.right);
         }
     }
    
    複製代碼

    時間複雜度: 該方案用了層級遍歷的方式,時間複雜度至關於每個的遍歷,因此爲O(n)=O(n)ui

    空間複雜度: 該方案使用了額外的空間,使用了數組暫存樹,至關於把樹轉化爲了數組,因此空間複雜度O(n)=O(n)spa

總結

本題的大體解法如上所訴,相對於空間開銷是差很少,效率提高很多,果真remove仍是有點麻煩的。翻譯

歡迎關注個人博客-FightCrapcode

相關文章
相關標籤/搜索