描述
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},
return its bottom-up level order traversal as:
1 2 3 4 5
| [ [15,7], [9,20], [3] ]
|
分析
树的层次遍历,与(E) Binary Tree Level Order Traversal代码基本一样,但最后返回的是vector>(result.rbegin(), result.rend()),因为传入的是rbegin和rend,可以将序列翻转:

解决方案1(Python)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
class Solution(object): def levelOrderBottom(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ if not root: return [] result = [] next_level = [root] while next_level: now_level = next_level result.insert(0, map(lambda x: x.val, now_level)) next_level = [] for item in now_level: if item.left: next_level.append(item.left) if item.right: next_level.append(item.right) return result
|
解决方案2(C++)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
class Solution { public: vector<vector<int>> result; void leveltravel(TreeNode* root, int level) { if(root == NULL) { return; } if(level == result.size()) { vector<int> v; result.push_back(v); } result[level].push_back(root->val); leveltravel(root->left, level+1); leveltravel(root->right, level+1); }
vector<vector<int>> levelOrderBottom(TreeNode* root) { leveltravel(root, 0); return vector<vector<int>>(result.rbegin(), result.rend()); } };
|
解决方案3(Java)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
class Solution { public List<List<Integer>> levelOrderBottom(TreeNode root) { List<List<Integer>> result = new LinkedList<List<Integer>>(); DFS(root, 0, result); return result; } private void DFS(TreeNode node, int i, List<List<Integer>> result) { if (node == null) { return; } if (i == result.size()) { result.add(0, new LinkedList<Integer>()); } result.get(result.size()-i-1).add(node.val); DFS(node.left, i+1, result); DFS(node.right, i+1, result); } }
|
解决方案4 (Golang)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
func levelOrderBottom(root *TreeNode) [][]int { if root == nil { return nil } result := [][]int{} queue := []*TreeNode{root} for len(queue) > 0 { queueLength := len(queue) layer := []int{} for i := 0; i < queueLength; i++ { layer = append(layer, queue[i].Val) if queue[i].Left != nil { queue = append(queue, queue[i].Left) } if queue[i].Right != nil { queue = append(queue, queue[i].Right) } } result = append(result, layer) queue = queue[queueLength:] } for i, resultLength := 0, len(result); i < resultLength/2; i++ { result[i], result[resultLength-i-1] = result[resultLength-i-1], result[i] } return result }
|
相关问题