1. 程式人生 > 其它 >LeetCode 116. Populating Next Right Pointers in Each Node

LeetCode 116. Populating Next Right Pointers in Each Node

LeetCode 116. Populating Next Right Pointers in Each Node (填充每個節點的下一個右側節點指標)

題目

連結

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

問題描述

給定一個 完美二叉樹 ,其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下:

struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每個 next 指標,讓這個指標指向其下一個右側節點。如果找不到下一個右側節點,則將 next 指標設定為 NULL。

初始狀態下,所有 next 指標都被設定為 NULL。

示例

輸入:root = [1,2,3,4,5,6,7]
輸出:[1,#, 2,3,#,4,5,6,7,#]

提示

樹中節點的數量在 [0, 212 - 1] 範圍內
-1000 <= node.val <= 1000

思路

同樣是樹的基本操作,需要注意的就是next初始就是null,最右側不需要考慮。

複雜度分析

時間複雜度 O(n)
空間複雜度 O(n)

程式碼

Java

    public Node connect(Node root) {
        if (root == null) {
            return null;
        }
        connectNode(root.left,root.right);
        return root;
    }

    public void connectNode(Node n1, Node n2) {
        if (n1 == null || n2 == null) {
            return;
        }
        n1.next = n2;
        connectNode(n1.left, n1.right);
        connectNode(n1.right, n2.left);
        connectNode(n2.left, n2.right);
    }