zoukankan      html  css  js  c++  java
  • 2021-04-13:判断二叉树是否是平衡二叉树?

    2021-04-13:判断二叉树是否是平衡二叉树?

    福大大 答案2021-04-13:

    1.左子节点平衡。
    2.右子节点平衡。
    3.左右子节点高度差不超过1。
    采用递归即可。

    代码用golang编写。代码如下:

    package main
    
    import "fmt"
    
    func main() {
        head := &TreeNode{Val: 5}
        head.Left = &TreeNode{Val: 3}
        head.Right = &TreeNode{Val: 7}
        head.Left.Left = &TreeNode{Val: 2}
        head.Left.Right = &TreeNode{Val: 4}
        head.Right.Left = &TreeNode{Val: 6}
        head.Right.Right = &TreeNode{Val: 8}
        ret := IsBalanced(head)
        fmt.Println("是否是平衡树:", ret)
    }
    
    //Definition for a binary tree node.
    type TreeNode struct {
        Val   int
        Left  *TreeNode
        Right *TreeNode
    }
    type Info struct {
        IsBalanced bool
        Height     int
    }
    
    func IsBalanced(head *TreeNode) bool {
        return process(head).IsBalanced
    }
    
    func process(head *TreeNode) *Info {
        if head == nil {
            return &Info{IsBalanced: true}
        }
    
        leftInfo := process(head.Left)
        //左不平衡
        if !leftInfo.IsBalanced {
            return leftInfo
        }
    
        rightInfo := process(head.Right)
        //右不平衡
        if !rightInfo.IsBalanced {
            return rightInfo
        }
    
        //高度差大于1
        if Abs(leftInfo.Height, rightInfo.Height) > 1 {
            return new(Info)
        }
    
        //通过所有考验
        return &Info{IsBalanced: true, Height: GetMax(leftInfo.Height, rightInfo.Height) + 1}
    
    }
    func GetMax(a int, b int) int {
        if a > b {
            return a
        } else {
            return b
        }
    }
    func Abs(a int, b int) int {
        if a > b {
            return a - b
        } else {
            return b - a
        }
    }
    
    

    执行结果如下:
    在这里插入图片描述


    左神java代码
    评论

  • 相关阅读:
    pycharm 社区版运行flask app相关配置
    飞冰框架学习记录
    从上一次到现在总结2
    从上一次到今天的总结1
    mybatis 遇到空串无法判断
    Shell 脚本入门
    数据库批量插入数据
    Navicat for mysql 实现数据库自动备份
    自定义校验注解
    C++ 提高编程
  • 原文地址:https://www.cnblogs.com/waitmoon/p/14655723.html
Copyright © 2011-2022 走看看