刷題系列 - 在二叉樹中,為每個節點關聯其右相鄰節點

張國平發表於2020-02-10

繼續刷題,題目如下圖

如果用C描述的話,就是一個二叉樹節點定義包括右節點指標,左節點指標,和右相連指標;給出一個二叉樹,維護其右相鄰指標,如果是最右邊節點,則指標為空。

struct Node {
  int val;
  Node *left;
  Node *right;
  Node *next;
}

思路其實很簡單,這個可以按層分析二叉樹,首先把當前層節點按照從左到右放入一個佇列中,遍歷這個佇列;如果不是佇列最後一個節點,則按照當前節點的next就是下一個節點;同時把每一個節點的子節點按照從左到右放入下一層佇列;然後 遍歷下一層佇列;直到這個佇列為空,遍歷完成。

程式碼如下:

"""
# Definition for a Node.
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 root == None:
            return None
        else:
            nodeList = []
            nodeList.append(root)
            while nodeList != []:
                nextList = []
                for i in range(len(nodeList)):
                    if nodeList[i].left != None:
                        nextList.append(nodeList[i].left)
                    if nodeList[i].right != None:
                        nextList.append(nodeList[i].right)
                    if i!= len(nodeList)-1:
                        nodeList[i].next = nodeList[i+1]
                nodeList = nextList
            return root


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2675050/,如需轉載,請註明出處,否則將追究法律責任。

相關文章