[leetcode]Populating Next Right Pointers in Each Node II

这道题目由于之前那题的训练,思路来的很快,但写的时候脑子浆糊了。这个时候就要高屋建瓴的去思考,把其中一段循环什么啊提炼成一个函数出来,那么主要那一块的逻辑就简单了。

public class Solution {

    public void connect(TreeLinkNode root) {

        if (root != null) root.next = null;

        TreeLinkNode first = root;

        TreeLinkNode last = null;

        while (first != null)

        {

            TreeLinkNode n = first;

            while (n != null)

            {

                if (n.left != null)

                {

                    if (last != null) last.next = n.left;

                    last = n.left;

                }

                if (n.right != null)

                {

                    if (last != null) last.next = n.right;

                    last = n.right;

                }

                n = n.next;

            }

            first = getNextLevelFirst(first);

            last = null;

        }

    }

    

    private TreeLinkNode getNextLevelFirst(TreeLinkNode first)

    {

        if (first == null) return null;

        while (first.left == null && first.right == null && first.next != null)

        {

            first = first.next;

        }

        if (first.left == null && first.right == null)

        {

            return null;

        }

        else if (first.left != null)

        {

            return first.left;

        }

        else if (first.right != null)

        {

            return first.right;

        }

        return null;

    }

}

  

你可能感兴趣的:(LeetCode)