假设二叉树中的结点均不相等,采用二叉链存储,用C设计递归算法删除根结点值为x的子树
时间: 2023-05-23 15:01:39 浏览: 51
好的,针对这个问题,我可以提供以下C代码实现:
```
typedef struct Node {
int key;
struct Node *left, *right;
} Node;
Node* deleteNode(Node* root, int x) {
if (root == NULL) // 如果根节点为空,直接返回
return NULL;
if (root->key == x) { // 如果找到了目标节点,进行删除操作
free(root);
return NULL;
}
// 递归删除左子树和右子树
root->left = deleteNode(root->left, x);
root->right = deleteNode(root->right, x);
return root;
}
```
使用这段代码可以实现删除根节点值为x的子树的功能。如果还有其它问题,欢迎继续提问。
相关问题
删除二叉树的子树:假设二叉树中的结点均不相等,采用二叉链存储,C语言设计递归算法删除根结点值为x的子树
可以使用递归算法来删除根节点值为x的子树。具体步骤如下:
1. 如果当前节点为空,则返回NULL。
2. 如果当前节点的值等于x,则删除当前节点的左右子树,并返回NULL。
3. 否则,递归删除当前节点的左子树和右子树,并更新当前节点的左右子树指针。
4. 返回当前节点。
以下是C语言的代码实现:
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* deleteSubtree(struct TreeNode* root, int x) {
if (root == NULL) {
return NULL;
}
if (root->val == x) {
root->left = deleteSubtree(root->left, x);
root->right = deleteSubtree(root->right, x);
return NULL;
}
root->left = deleteSubtree(root->left, x);
root->right = deleteSubtree(root->right, x);
return root;
}
删除二叉树的子树:假设二叉树中的结点均不相等,采用二叉链存储,设计递归算法删除根结点值为x的子树。
可以回答这个问题。递归删除根结点值为x的子树的算法如下:
1. 如果当前结点为空,则返回空。
2. 如果当前结点的值等于x,则将左右子树都置为空,返回空。
3. 递归删除左子树中值为x的子树。
4. 递归删除右子树中值为x的子树。
5. 如果当前结点的左子树不为空且值等于x,则将左子树置为空。
6. 如果当前结点的右子树不为空且值等于x,则将右子树置为空。
7. 返回当前结点。
代码实现如下:
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
};
TreeNode* deleteSubtree(TreeNode* root, int x) {
if (root == nullptr) {
return nullptr;
}
if (root->val == x) {
root->left = nullptr;
root->right = nullptr;
return nullptr;
}
root->left = deleteSubtree(root->left, x);
root->right = deleteSubtree(root->right, x);
if (root->left != nullptr && root->left->val == x) {
root->left = nullptr;
}
if (root->right != nullptr && root->right->val == x) {
root->right = nullptr;
}
return root;
}