美文网首页
107. Binary Tree Level Order Tra

107. Binary Tree Level Order Tra

作者: 窝火西决 | 来源:发表于2019-05-31 16:48 被阅读0次

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).

    For example:

    Given binary tree [3,9,20,null,null,15,7],
      3
      / \
    9 20
        / \
      15 7
    return its bottom-up level order traversal as:
    [
    [15,7],
    [9,20],
    [3]
    ]

    题目

    二叉树层序遍历,返回一个list集合,里面装了每一层的list集合,而且是从叶子到根的倒序

    思路

    首先二叉树层序遍历,利用队列,头结点先入队,以后遍历就从队列里弹,弹出一个将其左右孩子入队,再操作该节点。最后把list集合倒序即可
    难点是记录层的开始和结束,这里需要利用两个变量,代码如下:

    代码

     public List<List<Integer>> levelOrderBottom(TreeNode root) {
             List<List<Integer>> result =new ArrayList<>();
             List<Integer> listLevel =new ArrayList<>();
             Queue<TreeNode> q = new LinkedList<>();
             if(root==null){
                    return result;
                }
             int curLevelNum=1;//当前层节点数
             int nextLevelNum=0;//下一层节点数
             
             TreeNode p ;
             q.offer(root);
             while (q.size()>0) {
                p=q.poll();
                listLevel.add(p.val);//加入一个节点
                curLevelNum--;//当前层节点数-1
                if (p.left!=null) {
                    q.offer(p.left);
                    nextLevelNum++;//有左孩子下一层+1
                }
                if (p.right!=null) {
                    q.offer(p.right);
                    nextLevelNum++;//有右孩子下一层+1
                }
                
                if (curLevelNum==0) {
                    curLevelNum=nextLevelNum;
                    nextLevelNum=0;
                    result.add(listLevel);//把该层节点list放进去
                    listLevel=new ArrayList<Integer>();//再新建一个
                    
                }
                
            }
             reverse(result);
             
            return result;
            }
    
        private void reverse(List<List<Integer>> result) {
            int n = result.size();
            int start=0;
            int last=n-1;
            while (start<=last) {
                List<Integer> list = result.get(last);
                result.set(last, result.get(start));
                result.set(start, list);
                start++;
                last--;
            }
        }
    

    相关文章

      网友评论

          本文标题:107. Binary Tree Level Order Tra

          本文链接:https://www.haomeiwen.com/subject/fjdgtctx.html