编写递归算法,求二叉树中以元素值为x的结点为根的子树的深度
时间: 2023-04-25 18:04:26 浏览: 120
递归算法求二叉树中以元素值为x的结点为根的子树的深度:
1. 如果当前结点为空,则返回。
2. 如果当前结点的值等于x,则以当前结点为根的子树深度为1。
3. 否则,递归遍历当前结点的左子树和右子树,分别求出以x为根的子树深度。
4. 取左右子树深度的最大值,加1即为以x为根的子树深度。
代码如下:
int subtreeDepth(TreeNode* root, int x) {
if (root == NULL) {
return ;
}
if (root->val == x) {
return 1;
}
int leftDepth = subtreeDepth(root->left, x);
int rightDepth = subtreeDepth(root->right, x);
return max(leftDepth, rightDepth) + 1;
}
相关问题
编写递归算法,求二叉树中以元素值为x的结点为根的子树的深度。
```python
def depth_of_subtree(node, x):
if node is None:
return 0
if node.val == x:
left_depth = depth_of_subtree(node.left, x)
right_depth = depth_of_subtree(node.right, x)
return max(left_depth, right_depth) + 1
else:
return depth_of_subtree(node.left, x) + depth_of_subtree(node.right, x)
```
上面的算法假设二叉树的结点具有val属性,表示元素值,左右子结点分别为left和right。
算法中,如果当前结点为空,则返回0。如果当前结点的值为x,则返回左右子树的最大深度+1。如果当前结点的值不为x,则在左右子树中分别查找,最后返回两者之和。
C语言编写递归算法,求二叉树中以元素值为x的结点为根的子树的深度
在C语言中,我们可以使用递归算法来计算二叉树中以给定元素值`x`作为根节点的子树的深度。这里假设我们有一个简单的二叉树结构,每个节点包含一个值、左孩子和右孩子指针。
首先,我们需要定义一个二叉树节点的数据结构:
```c
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
然后编写递归函数`findDepth`来计算深度:
```c
int findDepth(TreeNode* root, int target) {
// 如果根节点为空,返回0表示空树
if (root == NULL)
return 0;
// 如果当前节点就是目标值,深度加一并返回
if (root->val == target)
return 1;
// 递归地在左右子树寻找,取较大深度
int leftDepth = findDepth(root->left, target);
int rightDepth = findDepth(root->right, target);
// 返回当前节点的深度加上最长分支的深度
return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
}
```
在这个函数中,我们会检查当前节点是否是我们正在查找的目标值,如果是,我们就返回1(因为根节点的深度是1)。如果不是,我们会分别在左右子树中递归寻找,并返回更深的那个子树的深度加上1。
阅读全文