数据结构C++统计二叉树的结点个数计算二叉树的深度算法思考
时间: 2024-11-21 22:27:33 浏览: 16
在C++中,统计二叉树的节点个数和计算其深度通常涉及递归方法。以下是两种常见的操作:
1. **统计二叉树节点个数** (Counting nodes in a binary tree):
- 对于空树,节点个数为0;
- 如果二叉树非空,根节点是一个节点,然后递归地对左子树和右子树分别计数,最后将结果加1。
```cpp
int countNodes(TreeNode* root) {
if (root == nullptr) return 0;
else return 1 + countNodes(root->left) + countNodes(root->right);
}
```
其中`TreeNode`是一个表示二叉树节点的数据结构,它通常包含一个指向左右子节点的指针。
2. **计算二叉树的深度** (Depth of a binary tree):
- 空树深度为0;
- 非空树的深度等于左子树和右子树的最大深度加1。
```cpp
int maxDepth(TreeNode* root) {
if (root == nullptr) return 0;
else {
int leftDepth = maxDepth(root->left);
int rightDepth = maxDepth(root->right);
return std::max(leftDepth, rightDepth) + 1;
}
}
```
**算法思考**:
- 计算节点数可以采用自底向上的方法(例如迭代),也可以使用递归,这里选择递归更简洁直观。
- 计算深度时,需要不断比较左右子树的高度并返回较大值,这体现了分治策略,即每次处理规模减半的问题。
阅读全文