117. Populating Next Right Pointers in Each Node II(填充每个节点的下一个右侧节点指针 II)

题目链接:

https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/

思路:

整体思路还是和上一题一样,只不过这次的不是完全二叉树,所以需要保存当前层的头结点。

而且在同一层中还要保存当前节点的上一个节点,便于横向连接。

Example:

AC 0ms 100% java:

/*
// Definition for a Node.
class Node {
    public int val;
    public Node left;
    public Node right;
    public Node next;

    public Node() {}

    public Node(int _val,Node _left,Node _right,Node _next) {
        val = _val;
        left = _left;
        right = _right;
        next = _next;
    }
};
*/
class Solution {
    public Node connect(Node root) {
        Node cur=root;
        Node prev=null;
        Node head=null;
        while(cur!=null){//外层循环用head更新每一层的第一个节点
            while(cur!=null){//内层循环依次向右找next节点
                if(cur.left!=null){
                   if(prev==null)
                       head=cur.left;//若prev首次访问,则无next域需要更新
                   else
                       prev.next=cur.left;//更新next域
                   prev=cur.left;
                }
                if(cur.right!=null){
                    if(prev==null)
                        head=cur.right;
                    else
                        prev.next=cur.right;//更新next域
                    prev=cur.right;
                }
                cur=cur.next;//内层循环依次向右找next节点
            }
            cur=head;
            prev=null;
            head=null;
        }
        return root;
    }
}

猜你喜欢

转载自blog.csdn.net/God_Mood/article/details/89043701