问题描述:给定一个二叉树,返回其节点值至底而上的层序遍历,即按从叶子节点躲在层到根节点。
bfs求解:一层一层的遍历很适合用于bfs遍历;
public List<List<Integer>>layer(TreeNode root)
{
List<List<Integer>> res=new?List<List<Integer>>();
Queue<Integer>queue=new LinkedList<>();
queue.add(root.val);
while(!queue.isEmpty())
{
int queueSize=queue.size();
List<Integer>list=new LinkedList<>();
for(int i=0;i<queueSize;i++)
{
TreeNode tempNode=queue.poll();
list.add(tempNode.val);
if(tempNode.left!=null)
queue.add(tempNode.left);
if(tempNode.right!=null)
queue.add(tempnode.right);
}
res.add(0,list);
}
return res;
}
dfs求解:每遍历到一层,若当前没有遍历过的层次,则在List<List<Integer>>res中再插入一个List<Integer>,否则插入res中的指定位置。
public void layer(TreeNode root ,List<List<Integer>> res,int level)
{
if(root==null){return;}
if(level<=res.size())
{
res.get(res.size()-level).add(root.val);
layer(root.left,res,level+1);
leyer(root.right,res,level+1);
}else
{
res.add(0,new LinkedList<Integer>());
res.get(0).add(root.val);
layer(root.left,res,level+1);
leyer(root.right,res,level+1);
}
}
public?List<List<Integer>>Layer(TreeNode root)
{
List<List<Integer>> res=new?List<List<Integer>>();
layer(root,res,0);
???????return res;
}