此博客链接:https://www.cnblogs.com/ping2yingshi/p/13423025.html
二叉树的层次遍历2
题目链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回其自底向上的层次遍历为:
[
[15,7],
[9,20],
[3]
]
题解:
思路:此题是层次遍历,所以肯定用到层次遍历,层次遍历用到了队列,把每层的节点按顺序存到队列中,然后按顺序依次出队列。
此题需要注意返回结果时是一个列表,而列表中的每一层的节点又是一个列表,所以需要定义两个列表,一个存储所有节点的返回结果,另外一个存储每层的节点。
而且最后的结果是层次遍历的倒序输出,只需要使用有序列表,在头部插入即可。
上面题解可以参考层次遍历题的题解,链接:https://www.cnblogs.com/ping2yingshi/p/13411813.html 。
代码如下:
class Solution { public List<List<Integer>> levelOrderBottom(TreeNode root) { List <List<Integer>> result=new LinkedList();//返回最后结果 Queue <TreeNode> queue=new LinkedList(); if(root==null) return result; queue.add(root); while(!queue.isEmpty()) { int len=queue.size(); List <Integer> temp=new ArrayList(); for(int i=0;i<len;i++) { TreeNode tempnum=queue.poll(); temp.add(tempnum.val); if(tempnum.left!=null) queue.add(tempnum.left); if(tempnum.right!=null) queue.add(tempnum.right); } result.add(0,temp); } return result; } }