#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MaxSize 50
//后续递归 删x
void postOrderDeleteX(BiTree T){
if(T){
postOrderDeleteX(T->lchild);
postOrderDeleteX(T->rchild);
free(T);
}
}
//找x
//层次遍历
void findXByLevel(BiTree T,int k){
BiTree queue[MaxSize],p = T;
int front = -1,rear = -1;
queue[++rear] = p;
while(front != rear){
p = stack[++front];
//if(p->data == x && p){
//postOrderDeleteX(p);
//p = NULL; 这样写是错的,这样即使把p给删了
//}
//可是p父亲结点的左孩子和右孩子的指针拿不到,不能置为空
if(p->lchild && p->lchild->data == x){
postOrderDeleteX(p->lchild);
p->lchild = NULL;
}
if(p->rchild && p->rchild->data == x){
postOrderDeleteX(p->rchild);
p->rchild = NULL;
}
//要删除x,肯定要把x的父结点对应的指针置为空,即左孩子指针和右孩子指针
if(p->lchild)
queue[++rear] = p->lchild;
if(p->rchild)
queue[++rear] = p->rchild;
}
}
【数据结构】删除树中每个元素值为x的结点,并删除以它为根的子树
最新推荐文章于 2023-04-26 17:05:13 发布