• LeetCode 树 116. 填充每个节点的下一个右侧节点指针(层序遍历 分层)


     

     题目的要求,大白话说就是:把指针指向同层的右侧节点

    提到同层,自然就要想到层序遍历,自然是队列实现

    问题是需要分层

    所以采用之前题目用的那种计数的方式

    class Solution {
        public Node connect(Node root) {
            if(root==null)
            {return root;}
            
            Queue<Node> queue=new ArrayDeque<>();
            Node fake=root;
            queue.add(root);
            while(queue.size()!=0)
            {
                int count=queue.size();
                for(int n=0;n<count;n++)
                {
                    fake=queue.poll();
                    if(n<count-1)
                    {
                        fake.next=queue.peek();
                    }
                    if(fake.left!=null)
                    {
                        queue.add(fake.left);
                    }
                    if(fake.right!=null)
                    {
                        queue.add(fake.right);
                    }
                }
            }
            return root;
        }
    }

    几个碰到的问题:

    1.前面要加对于空树的判断,要不会搞出null.next这种错误

    2.循环跳出的条件是什么?是queue.size()!=0,即所有元素已经进了队列并且弹出了。我一开始写成了fake!=null这个条件。仔细走一下这个顺序,发现fake会一直都是最后一个节点,跑成了死循环。但其实加个判断也能解决,但其实判断的条件就是队列排空。

    3.这个地方

    if(n<count-1)
                    {
                        fake.next=queue.peek();
                    }

    首先是,好在有一个peek的方法,使我们不用搞front Node和back Node来把先后排出队列的节点连起来

    其次是为什么要加if(n<count-1)这个计数的条件。因为最后一个元素的peek会peek到下一层去。。。

    由此发现,这种循环中,判断循环条件是什么任然是一个很棘手的问题。

  • 相关阅读:
    过滤器排序规则
    n维立体空间建模
    将多个Sheet导入到同一个Excel文件中
    Oracle分页查询
    SSH整合逻辑图
    MD5算法原理
    Spring框架整合Struts2
    Pandas入门——Series基本操作
    Python 使用selenium+webdriver爬取动态网页内容
    Python处理json和dict
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/13294628.html
Copyright © 2020-2023  润新知