二叉树的层次遍历2

此博客链接: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;
    }
}
原文地址:https://www.cnblogs.com/ping2yingshi/p/13423025.html