Python程式:查詢二叉樹中每條對角線路徑元素的和
假設我們有一個二叉樹,我們需要找到從樹的頂部到右下角的每條對角線的元素之和。
因此,如果輸入如下所示:
則輸出將為 [27, 18, 3],因為對角線為 [12,15]、[8,10]、[3]。所以和值為 [27, 18, 3]
為了解決這個問題,我們將遵循以下步驟:
定義一個函式 traverse()。它將接收節點、左側節點數、輸出作為引數。
如果節點為空,則
返回。
如果左側節點數大於或等於輸出的大小,則
將節點的資料插入到輸出的末尾。
否則,
輸出[左側節點數] := 輸出[左側節點數] + 節點的資料。
如果節點的左子節點不為空,則
遍歷(節點的左子節點, 左側節點數+1, 輸出)。
如果節點的右子節點不為空,則
遍歷(節點的右子節點, 左側節點數, 輸出)。
在主方法中,執行以下操作:
輸出 := 一個新的列表。
遍歷(根節點, 0, 輸出)。
返回輸出。
讓我們看看下面的實現,以便更好地理解:
示例
class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right class Solution: def solve(self, root): output = [] def traverse(node, numLeft, output): if not node: return if numLeft >= len(output): output.append(node.data) else: output[numLeft] += node.data if node.left: traverse(node.left, numLeft+1, output) if node.right: traverse(node.right, numLeft, output) traverse(root, 0, output) return output ob = Solution() root = TreeNode(12) root.left = TreeNode(8) root.right = TreeNode(15) root.left.left = TreeNode(3) root.left.right = TreeNode(10) print(ob.solve(root))
輸入
root = TreeNode(12) root.left = TreeNode(8) root.right = TreeNode(15) root.left.left = TreeNode(3) root.left.right = TreeNode(10)
輸出
[27, 18, 3]
廣告