二叉树删除子树c++
时间: 2023-08-10 19:07:21 浏览: 221
在二叉树中删除某个子树,可以采用递归的方法,具体步骤如下:
1. 如果当前子树为空,则直接返回。
2. 如果当前子树的左子树非空,递归删除左子树中的目标子树。
3. 如果当前子树的右子树非空,递归删除右子树中的目标子树。
4. 如果当前子树的左子树是目标子树,则将当前子树的左子树指针置为空,释放左子树空间。
5. 如果当前子树的右子树是目标子树,则将当前子树的右子树指针置为空,释放右子树空间。
下面是一个示例代码:
```c++
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void deleteSubTree(TreeNode* root, TreeNode* target) {
if(root == NULL) return;
if(root->left == target) {
root->left = NULL;
delete target;
return;
}
if(root->right == target) {
root->right = NULL;
delete target;
return;
}
deleteSubTree(root->left, target);
deleteSubTree(root->right, target);
}
```
其中,参数`root`为当前子树的根节点,参数`target`为要删除的目标子树的根节点。在函数中,先判断当前子树是否为空,如果为空则直接返回;否则,递归删除左子树和右子树中的目标子树,如果左子树或右子树是目标子树,则删除该子树并将父节点的指针置为空。
阅读全文