116 填充每個節點的下一個右側節點指針

LeetCode 116: 填充每個節點的下一個右側節點指針

 

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

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

初始狀態下,所有 next 指針都被設置爲 NULL。


示例:
解釋:給定二叉樹如圖 A 所示,你的函數應該填充它的每個 next 指針,以指向其下一個右側節點,如圖 B 所示。

提示:
你只能使用常量級額外空間。
使用遞歸解題也符合要求,本題中遞歸程序佔用的棧空間不算做額外的空間複雜度。

思路: 基於層次遍歷,每遍歷一層,依次將節點的.next = 下一節點,最後一個節點=None

 

定義結構:

class Node:
    def __init__(self, val: int = 0, left: 'Node' = None, right: 'Node' = None, next: 'Node' = None):
        self.val = val
        self.left = left
        self.right = right
        self.next = next

基於層次遍歷代碼實現:

class Solution:
    def connect(self, root: 'Node') -> 'Node':
        # 層次遍歷
        if not root:    return None
        cur_level = [root]
        while cur_level:
            temp,next_level=[],[]
            for node in cur_level:
                temp.append(node)   # 添加本層節點
                if node.left:   next_level.append(node.left)
                if node.right:  next_level.append(node.right)
            temp.append(None)   # 在最後一個位置處添加 None,便於循環
            for i in range(len(temp)-1):
                temp[i].next=temp[i+1]
            cur_level = next_level
        return root

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章