已知二叉树以二叉链表存储,编写算法完成: 对于树中每个元素值为X的结点,删除以它为根的子树,并释放相应的空间。

题目描述:已知二叉树以二叉链表存储,编写算法完成: 对于树中每个元素值为X的结点,删除以它为根的子树,并释放相应的空间。

分析: 删除一棵树需要将其左右子树都删除之后再删除根结点,那么考虑使用后序递归遍历来删除(后序递归遍历形式),之后先序递归遍历整个树。

void Del(BiTree T){
	if(T){
		Del(T->lchild);
		Del(T->rchild);
		free(T);
	}
}
void DelX(BiTree T,ElemType x){
	if(T == NULL)
		return;
	if(T->data == x){
		Del(T);	
		T = NULL;
	}
	DelX(T->lchild,x);
	DelX(T->rchild,x);
}

你可能感兴趣的:(树,数据结构)