image.png

    image.png

    1. package main
    2. import (
    3. "fmt"
    4. "math"
    5. )
    6. type TreeNode struct {
    7. Val int
    8. Left *TreeNode
    9. Right *TreeNode
    10. }
    11. func isBalanced(root *TreeNode) bool {
    12. if root ==nil {
    13. return true
    14. }
    15. l := dfs(root.Left)
    16. r := dfs(root.Right)
    17. return math.Abs(float64(l)-float64(r)) <=1&&isBalanced(root.Right)&&isBalanced(root.Left)
    18. }
    19. func dfs(root *TreeNode)int{
    20. if root ==nil {
    21. return 0
    22. }
    23. return max(dfs(root.Left),dfs(root.Right))+1
    24. }
    25. func max(a ,b int)int{
    26. if a>b {
    27. return a
    28. }
    29. return b
    30. }
    31. func main() {
    32. a := &TreeNode{
    33. Val: 3,
    34. }
    35. b := &TreeNode{
    36. Val: 9,
    37. }
    38. a.Left = b
    39. c := &TreeNode{
    40. Val: 20,
    41. }
    42. a.Right = c
    43. d := &TreeNode{
    44. Val: 15,
    45. }
    46. c.Left = d
    47. e := &TreeNode{
    48. Val: 7,
    49. }
    50. c.Right = e
    51. fmt.Println(isBalanced(a))
    52. // 4,2,5,1,6,3
    53. a1 := &TreeNode{
    54. Val: 1,
    55. }
    56. b1 := &TreeNode{
    57. Val: 2,
    58. }
    59. a1.Left = b1
    60. c1 := &TreeNode{
    61. Val: 2,
    62. }
    63. a1.Right = c1
    64. d1 := &TreeNode{
    65. Val: 3,
    66. }
    67. c1.Left = d1
    68. e1 := &TreeNode{
    69. Val: 3,
    70. }
    71. c1.Right = e1
    72. f1 := &TreeNode{
    73. Val: 4,
    74. }
    75. e1.Left = f1
    76. g1 := &TreeNode{
    77. Val: 4,
    78. }
    79. e1.Right = g1
    80. fmt.Println(isBalanced(a1))
    81. }