用c++编写一个递归算法来求二叉树中以元素值为x的结点为根的子树的深度
时间: 2024-12-15 18:23:15 浏览: 6
在 C++ 中,我们可以使用递归算法来计算二叉树中以给定元素值 `x` 的节点作为根的子树的最大深度。这里是一个简单的示例,假设我们有一个二叉树结构,其中包含一个整数值 `val` 和两个指向左右子节点的指针 `left` 和 `right`:
```cpp
#include <iostream>
using namespace std;
// 定义二叉树节点
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
// 计算以特定值x为根的子树最大深度函数
int maxDepth(TreeNode* root, int target) {
if (!root) return 0; // 如果根节点为空,返回0
// 如果当前节点值等于目标值,继续查找以该节点为根的子树深度
if (root->val == target) {
return max(maxDepth(root->left, target), maxDepth(root->right, target)) + 1;
}
// 如果不是目标值,仅考虑当前节点为左子树或右子树的情况
return max(maxDepth(root->left, target), maxDepth(root->right, target));
}
int main() {
// 创建一个示例二叉树
TreeNode* root = new TreeNode(5);
root->left = new TreeNode(3);
root->right = new TreeNode(7);
root->left->left = new TreeNode(2);
root->left->right = new TreeNode(4);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(8);
int target = 4; // 搜索的目标值
int result = maxDepth(root, target);
cout << "The maximum depth of the sub-tree with value " << target << " as root is: " << result << endl;
// 清理内存
delete root;
return 0;
}
```
在这个示例中,`maxDepth` 函数会遍历整个树,并对每个节点递归地调用自身,直到找到目标值或到达叶子节点。然后返回从目标节点到最远叶节点的最长路径长度。
阅读全文