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

    2021-04-14:判断二叉树是否是满二叉树?

    福大大 答案2021-04-14:

    网上查到的答案,一般会计算树的高度。我的答案不需要计算树的高度,至于是否准确,不得而知。
    1.左子节点满。
    2.右子节点满。
    3.左右子节点的数量相等。
    采用递归即可。

    代码用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 := IsFBT(head)
        fmt.Println("是否是满二叉树:", ret)
    }
    
    //Definition for a binary tree node.
    type TreeNode struct {
        Val   int
        Left  *TreeNode
        Right *TreeNode
    }
    
    type Info struct {
        IsFull bool
        Cnt    int
    }
    
    func IsFBT(head *TreeNode) bool {
        return process(head).IsFull
    }
    
    func process(head *TreeNode) *Info {
        if head == nil {
            return &Info{IsFull: true}
        }
    
        leftInfo := process(head.Left)
        //左不满
        if !leftInfo.IsFull {
            return leftInfo
        }
    
        rightInfo := process(head.Right)
        //右不满
        if !rightInfo.IsFull {
            return rightInfo
        }
    
        //左右不等
        if leftInfo.Cnt != rightInfo.Cnt {
            return new(Info)
        }
    
        //通过所有考验
        return &Info{IsFull: true, Cnt: leftInfo.Cnt + rightInfo.Cnt + 1}
    
    }
    

    执行结果如下:
    图片


    左神java代码
    评论

  • 相关阅读:
    列表 list
    flask实现json数据处理、学生信息表格展示和jinjia2的用法
    flask实现用户登录和上传文件
    移动端APP测试
    charles-截取移动端请求-设置代理
    charles-过滤网络请求方法
    badboy的录制和jmeter的使用
    jmeter之关联
    jmeter集合点
    jmeter之检查点
  • 原文地址:https://www.cnblogs.com/waitmoon/p/14660277.html
Copyright © 2011-2022 走看看