zoukankan      html  css  js  c++  java
  • 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到下一层去。。。

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

  • 相关阅读:
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    72. Edit Distance
    583. Delete Operation for Two Strings
    582. Kill Process
    indexDB基本用法
    浏览器的渲染原理
    js实现txt/excel文件下载
    git 常用命令
    nginx进入 配置目录时
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/13294628.html
Copyright © 2011-2022 走看看