使用Python查詢二叉樹中右側節點的程式


假設我們提供了一棵二叉樹。我們還給出了一個指向節點(名為“u”)的指標,我們必須找到位於所提供節點右側的節點。位於給定節點右側的節點必須位於同一級別,並且給定節點可以是葉節點或內部節點。

因此,如果輸入如下所示:

並且u = 6,則輸出為8。

位於節點6右側的節點是節點8,因此將值8返回給我們。

為了解決這個問題,我們將遵循以下步驟:

  • 如果根為空,則

    • 返回null

  • dq := 一個新的雙端佇列

  • 將根插入dq的末尾

  • 當dq不為空時,執行以下操作

    • dq_size := dq的大小

    • temp := 一個新的列表

    • index := -1

    • 對於範圍0到dq_size中的每個值,執行以下操作:

      • node := 從dq刪除最後一個元素

      • 如果node的左子節點不為空,則

        • 將node的左子節點新增到dq的末尾

      • 如果node的右子節點不為空,則

        • 將node的右子節點新增到dq的末尾

      • 將node插入temp的末尾

      • 如果node與u相同,則

        • index := temp的大小 - 1

    • 如果index與temp的大小 - 1相同,則

      • 返回null

    • 如果index > -1,則

      • 返回temp[index + 1]

  • 返回null

讓我們看一下以下實現,以便更好地理解:

示例

from queue import deque
class TreeNode:
   def __init__(self, val=0, left=None, right=None):
      self.val = val
      self.left = left
      self.right = right
def insert(temp,data):
   que = []
   que.append(temp)
   while (len(que)):
      temp = que[0]
      que.pop(0)
      if (not temp.left):
         if data is not None:
            temp.left = TreeNode(data)
         else:
            temp.left = TreeNode(0)
         break
      else:
         que.append(temp.left)
      if (not temp.right):
         if data is not None:
            temp.right = TreeNode(data)
         else:
            temp.right = TreeNode(0)
            break
         else:
            que.append(temp.right)
def make_tree(elements):
   Tree = TreeNode(elements[0])
   for element in elements[1:]:
      insert(Tree, element)
   return Tree
def search_node(root, element):
   if (root == None):
      return None
   if (root.val == element):
      return root
   res1 = search_node(root.left, element)
   if res1:
      return res1
   res2 = search_node(root.right, element)
   return res2
def solve(root, u):
   if not root:
      return None
   dq = deque()
   dq.append(root)
   while dq:
      dq_size = len(dq)
      temp = []
      index = -1
      for _ in range(dq_size):
         node = dq.pop()
         if node.left:
            dq.appendleft(node.left)
         if node.right:
            dq.appendleft(node.right)
         temp.append(node)
         if node == u:
            index = len(temp) - 1
      if index == len(temp) - 1:
         return None
      if index > -1:
         return temp[index + 1]
   return None
root = make_tree([5, 3, 7, 2, 4, 6, 8])
u = search_node(root,6)
ret = solve(root, u)
print(ret.val)

輸入

root = make_tree([5, 3, 7, 2, 4, 6, 8])
u = search_node(root,6)

輸出

8

更新於:2021年5月29日

430 次檢視

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.