题目
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
返回其自底向上的层次遍历为:
[
[15,7],
[9,20],
[3]
]
算法
public class P107 {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
if (root == null) return new ArrayList<>();
List<List<Integer>> result = new ArrayList<>();
dfs(root, 0, result);
Collections.reverse(result);
return result;
}
//思想:前序遍历,层次输出
public void dfs(TreeNode node, int level, List<List<Integer>> result) {
if (node == null) return;
if (result.size() < level + 1) result.add(new ArrayList<>());
result.get(level).add(node.val);
dfs(node.left, level + 1, result);
dfs(node.right, level + 1, result);
}
}
思路:层次遍历的所有解法见:leetcode习题集——102. 二叉树的层次遍历
这里注意一点反向输出:Collections.reverse(result);