找BUG 题目理解 平衡二叉树 定义
https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof/
平衡二叉树 定义

是
定义错误
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func isBalanced(root *TreeNode) bool {
if root == nil {
return true
}
current := []*TreeNode{root}
for {
next := []*TreeNode{}
n := len(current)
hasNil := false
for i := 0; i < n; i++ {
t := current[i]
if t != nil {
if t.Left == nil {
hasNil = true
} else {
next = append(next, t.Left)
}
if t.Right == nil {
hasNil = true
} else {
next = append(next, t.Right)
}
}
}
m := len(next)
if m == 0 {
break
}
for i := 0; i < m; i++ {
t := next[i]
if t != nil {
if (t.Left != nil || t.Right != nil) && hasNil {
return false
}
}
}
current = next
}
return true
}
package main
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func isBalanced(root *TreeNode) bool {
if root == nil {
return true
}
fn := func(root *TreeNode) int {
if root == nil {
return 0
}
c := 1
current := []*TreeNode{root}
for {
next := []*TreeNode{}
n := len(current)
for i := 0; i < n; i++ {
t := current[i]
if t != nil {
if t.Left != nil {
next = append(next, t.Left)
}
if t.Right != nil {
next = append(next, t.Right)
}
}
}
m := len(next)
if m == 0 {
break
}
c++
current = next
}
return c
}
return fn(root.Left)-fn(root.Right) == 1 || fn(root.Left)-fn(root.Right) == -1 || fn(root.Left)-fn(root.Right) == 0
}

修正
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func isBalanced(root *TreeNode) bool {
if root == nil {
return true
}
fn := func(root *TreeNode) int {
if root == nil {
return 0
}
c := 1
current := []*TreeNode{root}
for {
next := []*TreeNode{}
n := len(current)
for i := 0; i < n; i++ {
t := current[i]
if t != nil {
if t.Left != nil {
next = append(next, t.Left)
}
if t.Right != nil {
next = append(next, t.Right)
}
}
}
m := len(next)
if m == 0 {
break
}
c++
current = next
}
return c
}
current := []*TreeNode{root}
for {
next := []*TreeNode{}
n := len(current)
for i := 0; i < n; i++ {
t := current[i]
if t != nil {
if t.Left != nil {
next = append(next, t.Left)
}
if t.Right != nil {
next = append(next, t.Right)
}
}
root := t
b := fn(root.Left)-fn(root.Right) == 1 || fn(root.Left)-fn(root.Right) == -1 || fn(root.Left)-fn(root.Right) == 0
if !b {
return false
}
}
m := len(next)
if m == 0 {
break
}
current = next
}
return true
}

浙公网安备 33010602011771号