二叉树的层次遍历 II
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其自底向上的层次遍历为:
[
[15,7],
[9,20],
[3]
]
思路+代码+注释:
public List<List<Integer>> levelOrderBottom(TreeNode root) {
/*
思路:采用一个队列存储根节点,弹出队列中所有节点添加到集合中,在将集合以尾插的形式添加到res中,在将集合中所有节点的左右节点入队
*/
Queue<TreeNode> queue=new LinkedList();
List<List<Integer>> numsList=new ArrayList<>();
if (root==null)
{
return numsList;
}
queue.add(root);
while (queue.size()>0)
{
List<TreeNode> nodeList=new ArrayList<>();
while (queue.size()>0)
{
nodeList.add(((LinkedList<TreeNode>) queue).pop());
}
List<Integer> vals=new ArrayList<>();
for (TreeNode node:nodeList
) {
vals.add(node.val);
if (node.left!=null)
{
queue.add(node.left);
}
if (node.right!=null)
{
queue.add(node.right);
}
}
numsList.add(0,vals);
}
return numsList;
}