编写递归算法,求二叉树中以元素值为x的结点为根的子树的深度
时间: 2023-04-25 15:04:26 浏览: 61
递归算法求二叉树中以元素值为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,则在左右子树中分别查找,最后返回两者之和。
在一棵二叉树中,求以值为X的结点为根结点的子树的深度。算法设计
可以通过递归的方式来求以值为X的结点为根结点的子树的深度。
具体实现方法如下:
1. 首先判断根结点是否为X值,如果是则返回1。
2. 如果根结点不是X值,则递归地遍历左右子树,找到X值所在的结点,递归的过程中记录深度值。
3. 如果在左子树或右子树中找到了X值所在的结点,则返回深度值加1。
4. 如果左右子树都没有找到X值所在的结点,则返回0。
具体的代码实现如下:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def get_depth(root: TreeNode, x: int) -> int:
if not root:
return 0
if root.val == x:
return 1
left_depth = get_depth(root.left, x)
if left_depth > 0:
return left_depth + 1
right_depth = get_depth(root.right, x)
if right_depth > 0:
return right_depth + 1
return 0
```
其中,参数root表示二叉树的根结点,参数x表示要查找的结点的值,返回值为以值为X的结点为根结点的子树的深度。