二叉树的深度

本文介绍了两种计算二叉树深度的方法:递归方法与层次遍历方法。递归方法通过比较左右子树深度来确定整体深度;层次遍历方法则逐层遍历二叉树,每遍历一层树的深度增加1。

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

题目描述

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

(1)二叉树深度使用递归

public class Solution {
	public int TreeDepth(TreeNode root) {
		int count=0;
		if(root==null){
			return 0;
		}
		int left=TreeDepth(root.left);
		int right = TreeDepth(root.right);
        return left>right?left+1:right+1;
    }
}

(2) 使用层次遍历,没遍历一层,树的深度就加1

	public int TreeDepth(TreeNode root) {
		//使用层次遍历,没遍历一层树的高度就加1
		if(root==null){
			return 0;
		}
		ArrayList<TreeNode> list=new ArrayList<TreeNode>();
		list.add(root);
		int count=0;
		while(list.size()!=0){
			count++;
			for(int i=0;i<list.size();i++){
				TreeNode node=list.remove(0);
				if(node.left!=null){
					list.add(node.left);
				}
				if(node.right!=null){
					list.add(node.right);
				}
			}
		}
		return count;
	}

 

### 计算二叉树深度 #### 方法一:递归法 递归法是最常见的用于计算二叉树深度的方法之一。其核心思想是分别递归地计算左子树和右子树的深度,然后取两者的较大值并加1作为整棵树的深度。 以下是基于 Python 的递归实现: ```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 0 else: left_depth = maxDepth(root.left) # 左子树的深度 right_depth = maxDepth(root.right) # 右子树的深度 return max(left_depth, right_depth) + 1 # 整体深度为左右子树中的最大值再加1 ``` 这种方法的时间复杂度为 O(n),其中 n 是节点的数量,因为每个节点都会被访问一次[^1]。然而需要注意的是,如果二叉树非常不平衡,则可能导致栈溢出的风险,尤其是在极端情况下(如退化成链表的情况)。此外,由于递归会重复调用函数本身,因此效率可能不如迭代方法高[^2]。 #### 方法二:非递归法(层序遍历) 另一种方式是非递归的方式——即采用广度优先搜索(BFS),也叫层次遍历。这种方式不需要显式的递归操作,而是借助队列来逐层处理节点。 下面是使用 BFS 实现的 Python 版本代码: ```python from collections import deque def maxDepth(root: TreeNode) -> int: if not root: return 0 queue = deque([(root, 1)]) # 初始化队列为根节点及其对应的层数 while queue: node, level = queue.popleft() if node.left: queue.append((node.left, level + 1)) if node.right: queue.append((node.right, level + 1)) return level # 返回最后处理的那一层的高度 ``` 此版本通过维护一个队列记录每一层上的所有节点,并逐步扩展到下一层直到没有更多节点为止。相比起递归形式来说,该方法可以有效避免因过深嵌套而引发的堆栈错误问题[^5]。 #### 性能对比分析 尽管两种算法都可以正确得出结果,但在实际应用中它们各有优劣之处。对于平衡较好的二叉树而言,上述任一种方案都能高效完成任务;但对于极度倾斜甚至接近单向列表形态的数据集时,推荐选用迭代型解决方案以规避潜在风险[^4]。 ### 结论 综上所述,无论是采取哪种策略解决此类题目都需要清楚理解各自适用场景以及局限所在以便做出最佳选择依据具体需求情况决定最适合自己的工具箱选项即可满足日常开发工作当中遇到的相关挑战[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值