From 8ca4bcf4d18ce87c4b40115f779153acbfd9bcee Mon Sep 17 00:00:00 2001 From: tphyhFighting <2363176358@qq.com> Date: Mon, 27 Dec 2021 20:21:09 +0800 Subject: [PATCH 1/3] add: leetcode 1609 solution --- .../1609.Even-Odd-Tree/1609.Even Odd Tree.go | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 leetcode/1609.Even-Odd-Tree/1609.Even Odd Tree.go diff --git a/leetcode/1609.Even-Odd-Tree/1609.Even Odd Tree.go b/leetcode/1609.Even-Odd-Tree/1609.Even Odd Tree.go new file mode 100644 index 00000000..e48683a0 --- /dev/null +++ b/leetcode/1609.Even-Odd-Tree/1609.Even Odd Tree.go @@ -0,0 +1,72 @@ +package leetcode + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +func isEvenOddTree(root *TreeNode) bool { + level := 0 + queue := []*TreeNode{root} + for len(queue) != 0 { + length := len(queue) + var nums []int + for i := 0; i < length; i++ { + node := queue[i] + if node.Left != nil { + queue = append(queue, node.Left) + } + if node.Right != nil { + queue = append(queue, node.Right) + } + nums = append(nums, node.Val) + } + if level%2 == 0 { + if !even(nums) { + return false + } + } else { + if !odd(nums) { + return false + } + } + queue = queue[length:] + level++ + } + return true +} + +func odd(nums []int) bool { + cur := nums[0] + if cur%2 != 0 { + return false + } + for _, num := range nums[1:] { + if num >= cur { + return false + } + if num%2 != 0 { + return false + } + cur = num + } + return true +} + +func even(nums []int) bool { + cur := nums[0] + if cur%2 == 0 { + return false + } + for _, num := range nums[1:] { + if num <= cur { + return false + } + if num%2 == 0 { + return false + } + cur = num + } + return true +} From e81f874c804e78db5af8c79fc2d7b92d20b5afef Mon Sep 17 00:00:00 2001 From: tphyhFighting <2363176358@qq.com> Date: Mon, 27 Dec 2021 20:21:24 +0800 Subject: [PATCH 2/3] add: leetcode 1609 test --- .../1609.Even Odd Tree_test.go | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 leetcode/1609.Even-Odd-Tree/1609.Even Odd Tree_test.go diff --git a/leetcode/1609.Even-Odd-Tree/1609.Even Odd Tree_test.go b/leetcode/1609.Even-Odd-Tree/1609.Even Odd Tree_test.go new file mode 100644 index 00000000..6ac31fbc --- /dev/null +++ b/leetcode/1609.Even-Odd-Tree/1609.Even Odd Tree_test.go @@ -0,0 +1,73 @@ +package leetcode + +import ( + "fmt" + "testing" +) + +type question1609 struct { + para1609 + ans1609 +} + +// para 是参数 +type para1609 struct { + root *TreeNode +} + +// ans 是答案 +type ans1609 struct { + ans bool +} + +func Test_Problem1609(t *testing.T) { + + qs := []question1609{ + + { + para1609{&TreeNode{1, + &TreeNode{10, + &TreeNode{3, &TreeNode{12, nil, nil}, &TreeNode{8, nil, nil}}, nil}, + &TreeNode{4, &TreeNode{7, &TreeNode{6, nil, nil}, nil}, &TreeNode{9, nil, &TreeNode{2, nil, nil}}}}}, + ans1609{true}, + }, + + { + para1609{&TreeNode{5, + &TreeNode{4, &TreeNode{3, nil, nil}, &TreeNode{3, nil, nil}}, + &TreeNode{2, &TreeNode{7, nil, nil}, nil}}}, + ans1609{false}, + }, + + { + para1609{&TreeNode{5, + &TreeNode{9, &TreeNode{3, nil, nil}, &TreeNode{5, nil, nil}}, + &TreeNode{1, &TreeNode{7, nil, nil}, nil}}}, + ans1609{false}, + }, + + { + para1609{&TreeNode{1, nil, nil}}, + ans1609{true}, + }, + + { + para1609{&TreeNode{11, + &TreeNode{8, + &TreeNode{1, &TreeNode{30, &TreeNode{17, nil, nil}, nil}, &TreeNode{20, nil, nil}}, + &TreeNode{3, &TreeNode{18, nil, nil}, &TreeNode{16, nil, nil}}}, + &TreeNode{6, + &TreeNode{9, &TreeNode{12, nil, nil}, &TreeNode{10, nil, nil}}, + &TreeNode{11, &TreeNode{4, nil, nil}, &TreeNode{2, nil, nil}}}}}, + ans1609{true}, + }, + } + + fmt.Printf("------------------------Leetcode Problem 1609------------------------\n") + + for _, q := range qs { + _, p := q.ans1609, q.para1609 + fmt.Printf("【input】:%v 【output】:%v\n", p.root, isEvenOddTree(p.root)) + } + fmt.Printf("\n\n\n") +} From f8b38b73bbdfea3e6425fcddfd61e2fc5ce04e04 Mon Sep 17 00:00:00 2001 From: tphyhFighting <2363176358@qq.com> Date: Mon, 27 Dec 2021 20:21:41 +0800 Subject: [PATCH 3/3] add: leetcode 1609 readme --- leetcode/1609.Even-Odd-Tree/README.md | 150 ++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 leetcode/1609.Even-Odd-Tree/README.md diff --git a/leetcode/1609.Even-Odd-Tree/README.md b/leetcode/1609.Even-Odd-Tree/README.md new file mode 100644 index 00000000..25acb267 --- /dev/null +++ b/leetcode/1609.Even-Odd-Tree/README.md @@ -0,0 +1,150 @@ +# [1609. Even Odd Tree](https://leetcode-cn.com/problems/even-odd-tree/) + +## 题目 + +A binary tree is named Even-Odd if it meets the following conditions: + +- The root of the binary tree is at level index 0, its children are at level index 1, their children are at level index 2, etc. +- For every even-indexed level, all nodes at the level have odd integer values in strictly increasing order (from left to right). +- For every odd-indexed level, all nodes at the level have even integer values in strictly decreasing order (from left to right). + +Given the root of a binary tree, return true if the binary tree is Even-Odd, otherwise return false. + +**Example 1**: + +![https://assets.leetcode.com/uploads/2020/09/15/sample_1_1966.png](https://assets.leetcode.com/uploads/2020/09/15/sample_1_1966.png) + + Input: root = [1,10,4,3,null,7,9,12,8,6,null,null,2] + Output: true + Explanation: The node values on each level are: + Level 0: [1] + Level 1: [10,4] + Level 2: [3,7,9] + Level 3: [12,8,6,2] + Since levels 0 and 2 are all odd and increasing and levels 1 and 3 are all even and decreasing, the tree is Even-Odd. + +**Example 2**: + +![https://assets.leetcode.com/uploads/2020/09/15/sample_2_1966.png](https://assets.leetcode.com/uploads/2020/09/15/sample_2_1966.png) + + Input: root = [5,4,2,3,3,7] + Output: false + Explanation: The node values on each level are: + Level 0: [5] + Level 1: [4,2] + Level 2: [3,3,7] + Node values in level 2 must be in strictly increasing order, so the tree is not Even-Odd. + +**Example 3**: + +![https://assets.leetcode.com/uploads/2020/09/22/sample_1_333_1966.png](https://assets.leetcode.com/uploads/2020/09/22/sample_1_333_1966.png) + + Input: root = [5,9,1,3,5,7] + Output: false + Explanation: Node values in the level 1 should be even integers. + +**Example 4**: + + Input: root = [1] + Output: true + +**Example 5**: + + Input: root = [11,8,6,1,3,9,11,30,20,18,16,12,10,4,2,17] + Output: True + +**Constraints:** + +- The number of nodes in the tree is in the range [1, 100000]. +- 1 <= Node.val <= 1000000 + +## 题目大意 + +如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : + +- 二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。 +- 偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增 +- 奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减 + +给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。 + +## 解题思路 + +- 广度优先遍历(分别判断奇数层和偶数层) + +## 代码 + +```go +package leetcode + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +func isEvenOddTree(root *TreeNode) bool { + level := 0 + queue := []*TreeNode{root} + for len(queue) != 0 { + length := len(queue) + var nums []int + for i := 0; i < length; i++ { + node := queue[i] + if node.Left != nil { + queue = append(queue, node.Left) + } + if node.Right != nil { + queue = append(queue, node.Right) + } + nums = append(nums, node.Val) + } + if level%2 == 0 { + if !even(nums) { + return false + } + } else { + if !odd(nums) { + return false + } + } + queue = queue[length:] + level++ + } + return true +} + +func odd(nums []int) bool { + cur := nums[0] + if cur%2 != 0 { + return false + } + for _, num := range nums[1:] { + if num >= cur { + return false + } + if num%2 != 0 { + return false + } + cur = num + } + return true +} + +func even(nums []int) bool { + cur := nums[0] + if cur%2 == 0 { + return false + } + for _, num := range nums[1:] { + if num <= cur { + return false + } + if num%2 == 0 { + return false + } + cur = num + } + return true +} +``` \ No newline at end of file