二叉树的最大高度

本文介绍两种求解二叉树最大深度的方法:递归法和层次遍历法。递归法通过比较左右子树的最大深度来确定整棵树的深度;层次遍历法则类似于宽度优先搜索,逐层遍历树的所有节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。*/
//递归/*递归

class Solution {
public:
    int maxDepth(TreeNode* root) {
        if (root == NULL)
            return 0;
        int max_left = maxDepth(root->left);
        int max_right = maxDepth(root->right);

        return max_left > max_right ? (max_left+1) : (max_right+1);
    }


};*///采用层次遍历的方法,类似bfs的解法

class Solution {
public:
    int maxDepth(TreeNode* root) {
        int h = 0;
        if (root == NULL)
            return 0;
        queue<TreeNode* > s;
        s.push(root);

        while (!s.empty())
        {
            int n = s.size();
            while (n--)
            {
                TreeNode* r = s.front();
                s.pop();
                if (r->left != NULL) s.emplace(r->left);
                if (r->right != NULL)s.emplace(r->right);
            }
            h++;
        }
        return h;
    }
};

 

### 完全二叉树高度计算及相关性质 完全二叉树高度可以通过其节点数来计算。假设一个完全二叉树有 \( n \) 个节点,其高度 \( h \) 的公式可以表示为: \[ h = \lfloor \log_2{n} \rfloor + 1 \] 这是因为完全二叉树的前 \( h-1 \) 层是满的,而最后一层可能不完全是满的[^2]。具体来说,对于深度为 \( K \) 的完全二叉树,从第一层到第 \( K-1 \) 层的节点总数为 \( 2^{K-1} - 1 \),加上最后一层的部分节点数即可得到总节点数。 另外,具有 \( n \) 个节点的完全二叉树的深度也可以通过类似的公式得出,即: \[ \text{深度} = \lceil \log_2{(n+1)} \rceil \] 这表明完全二叉树高度与其节点数之间存在对数关系[^3]。 以下是用于验证该公式的 Python 实现代码示例: ```python import math def calculate_height_of_complete_binary_tree(nodes): """ 计算完全二叉树高度。 参数: nodes (int): 完全二叉树中的节点数 返回: int: 完全二叉树高度 """ if nodes <= 0: return 0 height = math.floor(math.log2(nodes)) + 1 return height # 测试函数 nodes = 15 height = calculate_height_of_complete_binary_tree(nodes) print(f"具有 {nodes} 个节点的完全二叉树高度为: {height}") ``` 此代码利用了数学库 `math` 中的 `log2` 函数来实现高度的计算逻辑。 #### 性质总结 1. **满二叉树** 是一种特殊的完全二叉树,其中每层的节点数均达到最大值。 2. 完全二叉树高度与节点数的关系可以用对数表达式描述。 3. 如果给定节点数 \( n \),则完全二叉树高度 \( h \) 可由 \( h = \lfloor \log_2{n} \rfloor + 1 \) 得出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值