使用 Python 查詢良好葉子節點對的數量的程式


假設我們有一棵二叉樹,以及另一個值距離 d。當這兩個節點之間的最短路徑小於或等於距離 d 時,一對兩個不同的葉子節點被稱為良好的。

因此,如果輸入類似於

並且距離 d = 4,則輸出將為 2,因為對是 (8,7) 和 (5,6),因為它們的路徑長度距離為 2,但 (7,5) 或 (8,6) 或其他對不是好的,因為它們的路徑長度為 5,大於 d = 4

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

  • sol := 0

  • 定義一個函式 util()。這將接收根節點

  • 如果根節點為空,則

    • 返回一個新的列表

  • 如果根節點是葉子節點,則

    • 返回一個包含一對 [0, 0] 的陣列

  • 否則,

    • cur := 一個新的列表

    • l := util(根節點的左子樹)

    • r := util(根節點的右子樹)

    • 對於 l 中的每個節點 n,執行

      • n[1] := n[1] + 1

    • 對於 r 中的每個節點 n,執行

      • n[1] := n[1] + 1

    • 對於 r 中的每個節點 n,執行

      • 對於 l 中的每個節點 n1,執行

        • 如果 n[1] + n1[1] <= d,則

          • sol := sol + 1

    • 返回 l+r

  • 從主方法執行以下操作 -

  • util(根節點)

  • 返回 sol

讓我們檢視以下實現以更好地理解 -

示例

 現場演示

class TreeNode:
def __init__(self, val=0, left=None, right=None):
   self.val = val
   self.left = left
   self.right = right
class Solution:
   def __init__(self):
      self.sol = 0
   def solve(self, root, d):
      def util(root):
         if not root:
            return []
         if not root.left and not root.right:
            return [[0, 0]]
         else:
            cur = []
            l = util(root.left)
            r = util(root.right)
            for n in l:
               n[1] += 1
            for n in r:
               n[1] += 1
            for n in r:
               for n1 in l:
                  if n[1] + n1[1] <= d:
                     self.sol += 1
            return l+r
      util(root)
      return self.sol
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.right = TreeNode(4)
root.left.right.left = TreeNode(8)
root.left.right.right = TreeNode(7)
root.right.left = TreeNode(5)
root.right.right = TreeNode(6)
d = 4
ob = Solution()
print(ob.solve(root, d))

輸入

root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.right = TreeNode(4)
root.left.right.left = TreeNode(8)
root.left.right.right = TreeNode(7)
root.right.left = TreeNode(5)
root.right.right = TreeNode(6)
d = 4

輸出

2

更新於: 2021年5月29日

260 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告