vlambda博客
学习文章列表

Go 二叉树和基本操作

对于数据结构来说,二叉树绝对是使用和讨论最多的一种结构,我们试着用Go语言描述二叉树

  1. 判断二叉树是否是平衡二叉树

  2. 二叉树的最大深度

package main

import "math"

type TreeNode struct {
    Left *TreeNode
    data int
    Right *TreeNode
}

/**
 * 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
    }

    return math.Abs(float64(maxDepth(root.Left)) - float64(maxDepth(root.Right))) <= 1 &&
        isBalanced(root.Left) && isBalanced(root.Right)
}

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */

func maxDepth(root *TreeNode) int {
    if root == nil {
        return 0
    }
    return 1 + max(maxDepth(root.Left), maxDepth(root.Right))
}

func max(l, r int) int {
    if l > r {
        return l
    }
    return r
}