From 1dc23dd6adbd159f4ece94a10385ced099410bd0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 21 Apr 2024 10:52:54 +0800 Subject: [PATCH] Add solution and test-cases for problem 2641 --- .../2641.Cousins-in-Binary-Tree-II/README.md | 46 ++++++++++++++++++ .../Solution.go | 36 +++++++++++++- .../Solution_test.go | 43 +++++++++++++--- .../diagram33.png | Bin 0 -> 7544 bytes .../example11.png | Bin 0 -> 12765 bytes 5 files changed, 116 insertions(+), 9 deletions(-) create mode 100644 leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/README.md create mode 100644 leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/diagram33.png create mode 100644 leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/example11.png diff --git a/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/README.md b/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/README.md new file mode 100644 index 000000000..663c673aa --- /dev/null +++ b/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/README.md @@ -0,0 +1,46 @@ +# [1001.Grid Illumination][title] + +## Description +Given the `root` of a binary tree, replace the value of each node in the tree with the **sum of all its cousins' values**. + +Two nodes of a binary tree are **cousins** if they have the same depth with different parents. + +Return the `root` of the modified tree. + +**Note** that the depth of a node is the number of edges in the path from the root node to it. + +**Example 1:** + +![1](./example11.png) + +``` +Input: root = [5,4,9,1,10,null,7] +Output: [0,0,0,7,7,null,11] +Explanation: The diagram above shows the initial binary tree and the binary tree after changing the value of each node. +- Node with value 5 does not have any cousins so its sum is 0. +- Node with value 4 does not have any cousins so its sum is 0. +- Node with value 9 does not have any cousins so its sum is 0. +- Node with value 1 has a cousin with value 7 so its sum is 7. +- Node with value 10 has a cousin with value 7 so its sum is 7. +- Node with value 7 has cousins with values 1 and 10 so its sum is 11. +``` + +**Example 2:** + +![2](./diagram33.png) + +``` +Input: root = [3,1,2] +Output: [0,0,0] +Explanation: The diagram above shows the initial binary tree and the binary tree after changing the value of each node. +- Node with value 3 does not have any cousins so its sum is 0. +- Node with value 1 does not have any cousins so its sum is 0. +- Node with value 2 does not have any cousins so its sum is 0. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/cousins-in-binary-tree-ii +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/Solution.go b/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/Solution.go index d115ccf5e..cd9daa9d0 100755 --- a/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/Solution.go +++ b/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) *TreeNode { + if root == nil { + return nil + } + sum := 0 + queue := [][2]*TreeNode{{nil, root}} + root.Val = 0 + for len(queue) > 0 { + nq := make([][2]*TreeNode, 0) + sum = 0 + del := make(map[*TreeNode]int) + for _, item := range queue { + if item[1].Left != nil { + nq = append(nq, [2]*TreeNode{item[1], item[1].Left}) + sum += item[1].Left.Val + del[item[1]] += item[1].Left.Val + } + if item[1].Right != nil { + nq = append(nq, [2]*TreeNode{item[1], item[1].Right}) + sum += item[1].Right.Val + del[item[1]] += item[1].Right.Val + } + } + for _, item := range nq { + item[1].Val = sum - del[item[0]] + } + queue = nq + } + return root } diff --git a/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/Solution_test.go b/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/Solution_test.go index 14ff50eb4..f014dc8ae 100755 --- a/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/Solution_test.go +++ b/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/Solution_test.go @@ -10,12 +10,41 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 4, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 10}, + }, + Right: &TreeNode{ + Val: 9, + Right: &TreeNode{Val: 7}, + }, + }, &TreeNode{ + Val: 0, + Left: &TreeNode{ + Val: 0, + Left: &TreeNode{Val: 7}, + Right: &TreeNode{Val: 7}, + }, + Right: &TreeNode{ + Val: 0, + Right: &TreeNode{Val: 11}, + }, + }}, + {"TestCase1", &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 2}, + }, &TreeNode{ + Val: 0, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{Val: 0}, + }}, } // 开始测试 @@ -30,10 +59,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/diagram33.png b/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/diagram33.png new file mode 100644 index 0000000000000000000000000000000000000000..5401d3e75d32cf610aff5b0580a983653f44cc97 GIT binary patch literal 7544 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ꖴ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 literal 0 HcmV?d00001