美文网首页
判定平衡二叉树

判定平衡二叉树

作者: FredricZhu | 来源:发表于2020-08-18 13:40 被阅读0次

    题干


    图片.png

    代码

    package main
    
    import (
        "fmt"
        "math"
    )
    
    // TreeNode 树节点对象
    type TreeNode struct {
        Val   int       // 值节点
        Left  *TreeNode // 左子树
        Right *TreeNode // 右子树
    }
    
    func getTreeHeight(root *TreeNode) int {
        if root == nil {
            return 0
        }
    
        left := root.Left
        right := root.Right
        lh := getTreeHeight(left)
        rh := getTreeHeight(right)
        if lh >= 0 && rh >= 0 && int(math.Abs(float64(lh-rh))) <= 1 {
            return int(math.Max(float64(lh), float64(rh))) + 1
        }
        return -1
    }
    
    // IsBalanced 是否平衡二叉树
    func IsBalanced(root *TreeNode) bool {
        return getTreeHeight(root) >= 0
    }
    
    func main() {
        root := &TreeNode{
            Val: 3,
            Left: &TreeNode{
                Val: 9,
            },
            Right: &TreeNode{
                Val: 20,
                Left: &TreeNode{
                    Val: 15,
                },
                Right: &TreeNode{
                    Val: 7,
                },
            },
        }
    
        isBalanced := IsBalanced(root)
        if isBalanced {
            fmt.Println(root, "是一棵平衡二叉树")
        } else {
            fmt.Println(root, "不是一棵平衡二叉树")
        }
    }
    

    相关文章

      网友评论

          本文标题:判定平衡二叉树

          本文链接:https://www.haomeiwen.com/subject/ehhcjktx.html