📅  最后修改于: 2023-12-03 14:55:14.115000             🧑  作者: Mango
在二叉树中,每个节点都可以有左右两个子节点。本题的目标是修改二叉树,使每个节点都存储左子树中所有节点的总和。
我们可以使用递归的方式来处理每个节点。对于每个节点,只需先修改其左子节点,再计算左子树中所有节点的总和,并将该值更新到当前节点的值中。最后,再递归处理其右子节点。
以下是一个示例代码,可供参考:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def sumLeftNode(self, root: TreeNode) -> int:
if not root:
return 0
sum_left = self.sumLeftNode(root.left)
root.val += sum_left
sum_right = self.sumLeftNode(root.right)
return root.val + sum_right
def modifyTree(self, root: TreeNode) -> TreeNode:
self.sumLeftNode(root)
return root
该代码使用了两个函数,其中 sumLeftNode
函数用于递归地处理每个节点,计算其左子树中所有节点的总和,并返回当前节点的值加上右子树节点的总和。而 modifyTree
函数则是整个程序的入口,它用于调用 sumLeftNode
函数,并返回根节点。
为了更好地理解这段代码,我们可以结合下面的例子进行说明:
假设存在二叉树
1
/ \
2 3
/ \ / \
4 5 6 7
我们按照以下步骤进行修改:
修改后的二叉树为
5
/ \
6 3
/ \ / \
4 5 6 7
可以看到,每个节点都存储了其左子树中所有节点的总和。这样做可以方便我们查找某个节点的子节点个数,从而进行各种操作。