给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
返回其自底向上的层序遍历为:
[
[15,7],
[9,20],
[3]
]
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> ans=new ArrayList<>();
HashMap<Integer,LinkedList<Integer>> temp=new HashMap();
dfs(0,temp,root);
for(int i=temp.size()-1;i>=0;i--)
{
ans.add(temp.get(i));
}
return ans;
}
public void dfs(int depth,HashMap<Integer,LinkedList<Integer>> ans,TreeNode root)
{
if(root==null)
return;
if(!ans.containsKey(depth))
ans.put(depth,new LinkedList<>());
ans.get(depth).add(root.val);
dfs(depth+1,ans,root.left);
dfs(depth+1,ans,root.right);
}
List版
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> ans=new ArrayList<>();
List<List<Integer>> temp= new LinkedList<>();
dfs(0,temp,root);
for(int i=temp.size()-1;i>=0;i--)
{
ans.add(temp.get(i));
}
return ans;
}
public void dfs(int depth,List<List<Integer>> ans,TreeNode root)
{
if(root==null)
return;
if(depth>=ans.size())
ans.add(new LinkedList<>());
ans.get(depth).add(root.val);
dfs(depth+1,ans,root.left);
dfs(depth+1,ans,root.right);
}