leetcode2641.二叉树的堂兄弟的节点

题目链接

2641. 二叉树的堂兄弟节点 II - 力扣(LeetCode)

解题思路

题目要求将二叉树中每个节点的值都替换成所有堂兄弟节点和,而堂兄弟节点就是指那些和当前节点深度相同,但是父节点不同的节点。

例如,x的堂兄弟节点是第n层除去x和y的其他所有节点。

假设第n层所有的节点的和为sum,那么x的值应该被替换为sum - x - y。

leetcode2641.二叉树的堂兄弟的节点_第1张图片

解题代码

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def replaceValueInTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        q = [root]
        root.val = 0
        while len(q) > 0:
            q2 = []
            sum = 0
            for fa in q:
                if fa.left:
                    q2.append(fa.left)
                    sum += fa.left.val
                if fa.right:
                    q2.append(fa.right)
                    sum += fa.right.val
            for fa in q:
                childSum = (fa.left.val if fa.left else 0) + (fa.right.val if fa.right else 0)
                if fa.left:
                    fa.left.val = sum - childSum
                if fa.right:
                    fa.right.val = sum - childSum
            q = q2
        return root

你可能感兴趣的:(算法)