题目描述
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
思路
采用遍历的方式,新建一个函数,传入当前节点、深度、当前列表,若当前节点为空节点,则直接返回,若当前列表的长度小于深度+1(深度从0开始),则往当前列表中添加一个新的列表。将当前节点的值添加进对应深度的列表中。当前节点有左子节点或右子节点时,继续调用函数。遍历完所有节点后,将列表反转。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class LevelOrderBottom {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
int depth = 0;
levelOrderBottom(root, depth, ans);
Collections.reverse(ans);
return ans;
}
private void levelOrderBottom(TreeNode t, int depth, List<List<Integer>> l)
{
if(t == null)
return;
if(depth + 1 > l.size())
l.add(new ArrayList<Integer>());
l.get(depth).add(t.val);
if(t.left != null)
levelOrderBottom(t.left, depth + 1, l);
if(t.right != null)
levelOrderBottom(t.right, depth + 1, l);
}
}