LeetCode 222. 完全二叉树的节点个数

题目链接:LeetCode 222. 完全二叉树的节点个数

题意:

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。

解题思路:

1.按照普通的二叉树处理

递归法:
//本题直接就是求有多少个节点,无脑存进结果变量就行了。
func countNodes(root *TreeNode) int {
    if root == nil {
        return 0
    }
    res := 1
    if root.Right != nil {
        res += countNodes(root.Right)
    }
    if root.Left != nil {
        res += countNodes(root.Left)
    }
    return res
}
迭代法:
func countNodes(root *TreeNode) int {
    if root == nil {
    return 0
    }
    var res int
    var query []*TreeNode
    query = append(query,root)
    for len(query) > 0 {
        len:=len(query)
        res += len
        for len > 0 {
            len --
            node:= query[0]
            query = query[1:]
            if node.Left != nil {
                query = append(query,node.Left)
            }
             if node.Right != nil {
                query = append(query,node.Right)
            }
    } 
    }
    return res
}

2.利用完全二叉树的性质求解

递归法
func countNodes(root *TreeNode) int {
    if root == nil {
        return 0
    }
    leftH, rightH := 0, 0
    leftNode := root.Left
    rightNode := root.Right
    for leftNode != nil {
        leftNode = leftNode.Left
        leftH++
    }
    for rightNode != nil {
        rightNode = rightNode.Right
        rightH++
    }
    if leftH == rightH {  //左右子树的遍历深度相等,说明是满二叉树,
        return (2 << leftH) - 1   //注意(2<<1) 相当于2^2,返回满足满二叉树的子树节点数量
    }
    return countNodes(root.Left) + countNodes(root.Right) + 1
}
迭代法:
func countNodes(root *TreeNode) int {
    if root == nil {
        return 0
    }
    q := list.New()
    q.PushBack(root)
    res := 0
    for q.Len() > 0 {
        n := q.Len()
        for i := 0; i < n; i++ {
            node := q.Remove(q.Front()).(*TreeNode)
            if node.Left != nil {
                q.PushBack(node.Left)
            }
            if node.Right != nil {
                q.PushBack(node.Right)
            }
            res++
        }
    }
    return res 
}
posted @   小星code  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示