1. 程式人生 > 實用技巧 >107. 二叉樹的層次遍歷 II-簡單

107. 二叉樹的層次遍歷 II-簡單

問題描述

給定一個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)

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

3
/ \
9 20
/ \
15 7
返回其自底向上的層次遍歷為:

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

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii

解答

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 
*/ /* dfs遍歷二叉樹,從左至右。每個元素都有個deep(深度),只需將root.val放入result.get(deep)陣列中即可。 時間複雜度O(n),擊敗98%使用者。 */ class Solution { public static List<List<Integer>> result; public static void dfs(TreeNode root,int deep){ if(root.left == null && root.right == null)return; if(root.left!=null
){ if(deep+1 > (result.size())-1)result.add(new ArrayList<Integer>()); result.get(deep+1).add(root.left.val); dfs(root.left,deep+1); } if(root.right!=null){ if(deep+1 > (result.size())-1)result.add(new ArrayList<Integer>()); result.get(deep
+1).add(root.right.val); dfs(root.right,deep+1); } } public List<List<Integer>> levelOrderBottom(TreeNode root) { result = new ArrayList<List<Integer>>(); if(root == null)return result; result.add(new ArrayList<Integer>()); result.get(0).add(root.val); dfs(root,0); Collections.reverse(result); return result; } }