PTA 求二叉树高度 (20分)

本文详细阐述了如何通过递归方式计算二叉树的深度,关键在于理解二叉树的深度与其左右子树深度的关系,即二叉树的深度等于其左右子树中深度最大者加1。

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

    思路:二叉树的深度和它的左、右子树深度之间的关系。从二叉树深度的定义可知,二叉树的深度应为其左、右子树深度的最大值加1。由此,需先分别求得左、右子树的深度,求得左、右子树深度的最大值,然后加 1 即为二叉树的高度;可以递归的调用二叉树深度函数。
int GetHeight(BinTree BT){
    int high=0;//节点总数
    int depthleft,depthright;
    if(BT==NULL){
       return 0;
    }else{
       depthleft=GetHeight(BT->Left);
       depthright=GetHeight(BT->Right);
        if(depthleft>=depthright){
           high=1+depthleft;
         }else{
           high=1+depthright;
         }
     }
     //先将二叉树层次遍历一遍,求出节点总数
     return high;
}
### 关于二叉树高度的计算 在数据结构中,二叉树高度定义为从根节点到最远叶子节点路径上的边数。如果树为空,则其高度为 -1;仅有一个节点的情况下,高度为 0。 以下是基于递归方法实现二叉树高度计算的核心逻辑: #### 算法描述 通过递归方式左子树和右子树的高度,取两者中的较大值并加一作为当前节点的高度[^3]。具体实现如下所示: ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def maxDepth(root: TreeNode) -> int: if root is None: return -1 # 如果树为空,返回-1表示无高度 else: # 别获取左右子树的最大深 left_depth = maxDepth(root.left) right_depth = maxDepth(root.right) # 当前节点的高度等于左右子树最大深加1 current_height = max(left_depth, right_depth) + 1 return current_height ``` 上述代码片段展示了如何利用递归来解决二叉树高度问题。当遇到空节点时,函数会回溯至上一层,并逐步累加得到最终结果[^4]。 对于非递归版本,可以采用层次遍历的方式完成相同功能。借助队列存储每一层的所有节点,在逐层处理过程中记录层数即可得出目标高度[^5]。 ```python from collections import deque def maxDepthIterative(root: TreeNode) -> int: if not root: return -1 queue = deque([root]) depth = 0 while queue: level_size = len(queue) for _ in range(level_size): node = queue.popleft() if node.left: queue.append(node.left) if node.right: queue.append(node.right) depth += 1 return depth - 1 # 层次计数需减去最后一层空节点的影响 ``` 以上两种方法均能有效解决问题,可根据实际需选择适合自己的方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值