107 给定一个二叉树,返回其节点值自底向上的层次遍历。
- 建立以 <List<Integer>>为元素的List 用于存 result
- public List<List<Integer>> levelOrderBottom(TreeNode root) {
- 调用helper(root,0)
- 返回 result
- private void helper(TreeNode root, int level) {
- 如果根为空 返回空
- 如果result的size小于level+1
- 将
- 中间
- 左
- 右
public List<List<Integer>> levelOrder(TreeNode root) {
if(root == null) return new ArrayList<List<Integer>>();
List<List<Integer>> res = new ArrayList<List<Integer>>();
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
//将根节点放入队列中,然后不断遍历队列
queue.add(root);
while(queue.size() > 0) {
//获取当前队列的长度,这个长度相当于 当前这一层的节点个数
int size = queue.size();
ArrayList<Integer> tmp = new ArrayList<Integer>();
//将队列中的元素都拿出来(也就是获取这一层的节点),放到临时list中
//如果节点的左/右子树不为空,也放入队列中
for(int i = 0; i < size; ++i) {
TreeNode t = queue.remove();
tmp.add(t.val);
if(t.left != null) queue.add(t.left);
if(t.right != null) queue.add(t.right);
}//将临时list加入最终返回结果中
res.add(tmp);
}
return res;
}
List<List<Integer>> result = new ArrayList<>();
public List<List<Integer>> levelOrderBottom(TreeNode root) {
helper(root, 0);
return result;
}
private void helper(TreeNode root, int level) {
if(root == null) return;
if(result.size() < level + 1) {
result.add(0, new ArrayList<>());
}
int bucket = result.size() - level - 1;
result.get(bucket).add(root.val);
helper(root.left, level + 1);
helper(root.right, level + 1);
}
先来看递归法
102
- 直接调用helper方法 传入参数 root list level
- helper方法 返回值为list套list
- 如果list是空的 就建一个新的list
- 如果root为空 就返回list
- 如果list的size 等于level
- 就新加一层list
- 给list的第level层加root的val
- 调用helper root的left list 层+1
- 调用helper root的right list 层+1