→ sixB: 如果同lv有好幾個一樣的parent怎麼辦 10/23 15:52
推 dont: 直接用node當parent 不要用node.val 值可能重複? 10/23 15:52
→ sixB: 應該是只能跳過一個 10/23 15:52
→ sixB: 我是全部sum up再減掉自己這個 10/23 15:52
→ JerryChungYC: 那值不重複的Tree是什麼 我以為固定不重複 (( 10/23 15:58
→ sixB: 他只有說binary treeㄚ 10/23 16:02
→ JerryChungYC: parent的node.val改為node之後過了 但測資38 TLE (( 10/23 16:03
→ JerryChungYC: 跟binary tree不熟 :( 10/23 16:07
推 sixB: 1e5平衡樹,最後一層node太多ㄌ 1e5 / 2 10/23 16:15
→ sixB: 每次sum都迴圈會變n^2 10/23 16:15
→ JerryChungYC: 改多放一個 res[level]['total'] 10/23 16:18
→ JerryChungYC: sum 改成 'total' - parent 過了 開心 :) 10/23 16:18
Python Code:
# 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]:
def c(node: TreeNode, res: defaultdict, level: int, parent: int):
res[level]['total'] += node.val
res[level][parent] += node.val
if node.left:
c(node.left, res, level+1, node)
if node.right:
c(node.right, res, level+1, node)
def u(node: TreeNode, res: defaultdict, level: int, parent: int):
if node.left:
u(node.left, res, level+1, node)
if node.right:
u(node.right, res, level+1, node)
node.val = res[level]['total'] - res[level][parent]
res = defaultdict(lambda: defaultdict(int))
c(root, res, 1, 0)
u(root, res, 1, 0)
return root
※ 編輯: JerryChungYC (220.129.79.252 臺灣), 10/23/2024 16:19:51
→ JerryChungYC: 謝謝兩位大師捏 <3 10/23 16:21