2641. 二叉树的堂兄弟节点 II

2641. 二叉树的堂兄弟节点 II

解法一: 广度优先遍历

go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func replaceValueInTree(root *TreeNode) *TreeNode {
root.Val = 0
queue := []*TreeNode{root}
for len(queue) > 0 {
sonSum := 0
for _, node := range queue {
if node.Left != nil {
sonSum += node.Left.Val
}
if node.Right != nil {
sonSum += node.Right.Val
}
}
size := len(queue)
for _, node := range queue[:size] {
curSonSum := 0
if node.Left != nil {
curSonSum += node.Left.Val
}
if node.Right != nil {
curSonSum += node.Right.Val
}
curSonVal := sonSum - curSonSum
if node.Left != nil {
node.Left.Val = curSonVal
queue = append(queue, node.Left)
}
if node.Right != nil {
node.Right.Val = curSonVal
queue = append(queue, node.Right)
}
}
queue = queue[size:]
}
return root
}
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode replaceValueInTree(TreeNode root) {
root.val = 0;
Queue<TreeNode> queue = new ArrayDeque<>();
queue.offer(root);
while (!queue.isEmpty()) {
int sonSum = 0;
for (TreeNode node : queue) {
if (node.left != null) {
sonSum += node.left.val;
}
if (node.right != null) {
sonSum += node.right.val;
}
}
int size = queue.size();
for (int i = 0; i < size; i++) {
int curSonSum = 0;
TreeNode node = queue.poll();
if (node.left != null) {
curSonSum += node.left.val;
}
if (node.right != null) {
curSonSum += node.right.val;
}
int curSonVal = sonSum - curSonSum;
if (node.left != null) {
node.left.val = curSonVal;
queue.offer(node.left);
}
if (node.right != null) {
node.right.val = curSonVal;
queue.offer(node.right);
}
}
}
return root;
}
}
作者

wuhunyu

发布于

2024-02-07

更新于

2024-02-07

许可协议