帮忙用C++编一下:以二叉链表为存储结构,在二叉树中删除以值x为根结点的子树.~!!急用~!~

作者&投稿:佘连 (若有异议请与网页底部的电邮联系)
已知一棵二叉树以二叉链表为存储结构,编写如下程序:对于树中每一个元素值为x的结点,删去以它为根的子~

先前序遍历整个二叉树,找到符合要求的结点,然后后序遍历该结点的整个子树,逐一释放结点。
//假设二叉树结构体如下struct binTree{ int data; binTree *lchild; binTree *rchild;}*BiTree;//函数如下BiTree find(BiTree node, int x){ if(node) { if(node->data==x) delete(node); else { find(node->lchild); find(node->rchild); } }}BiTree delete(BiTree tree){ if(node) { delete(node->lchild); delete(node->rchild); free(node); node=NULL; }}

分太少

DEVC++下运行通过

#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
char data;
struct node *lchild;
struct node *rchild;
}BTnode;

void create(BTnode *&b,char str[])
{
BTnode *St[100],*p=NULL;
int top=-1,k,j=0;
char c;
b=NULL;
c=str[j];
while(c!='\0')
{
switch(c)
{
case '(' :top++;St[top]=p;k=1;break;
case ')' :top--;break;
case ',' :k=2;break;
default :p=(BTnode*)malloc(sizeof(BTnode));
p->data=c;p->lchild=p->rchild=NULL;
if(b==NULL)b=p;
else
{
switch(k)
{
case 1:St[top]->lchild=p;break;
case 2:St[top]->rchild=p;break;
}
}
}
j++;
c=str[j];
}
}

char Delete(BTnode *&b,char x)
{
BTnode *p;
p=b;

while(p!=NULL&&p->data!=x)
{
printf("%c",p->data);

while((p->lchild!=NULL&&p->lchild->data!=x)||(p->rchild!=NULL&&p->rchild->data!=x))
{
if(p->rchild!=NULL&&p->rchild->data!=x)
{
printf("(");
Delete(p->lchild,x);
printf(",");
Delete(p->rchild,x);
printf(")");
}

else
{
printf("(");
Delete(p->lchild,x);
printf(")");
}

break;
}

break;
}

}

int main()
{
char str[100],x;
BTnode *b;
printf("请输入二叉树的字符串:");
gets(str);
printf("\n要删除的子树的根节点为:");
scanf("%c",&x);
create(b,str);
printf("\n删除根节点为%c的子树后的二叉树字符串为:",x);
Delete(b,x);
printf("\n\n");
system("pause");
}

每个节点到达最底释放空间

帮忙用C++编一下:以二叉链表为存储结构,在二叉树中删除以值x为根结点...
答:gets(str);printf("\n要删除的子树的根节点为:");scanf("%c",&x);create(b,str);printf("\n删除根节点为%c的子树后的二叉树字符串为:",x);Delete(b,x);printf("\n\n");system("pause");

用C语言建立一棵含有n个结点的二叉树,采用二叉链表存储,然后分别实现...
答:int creat(list*root){ //创建一棵二叉树,root使用的是二维指针 char n;scanf(" %c",&n); //注%C前面加空格是为了起间隔作用 scanf不读入空格 if (n=='0') //0为间隔 { root=NULL; return 0; //输入结束 } root=(list)malloc(sizeof(bt));if (!*root) return 0;(*root...

以二叉链表作存储结构,编写二叉树深度的递归算法(c++语言)
答:typedef int Status;//二叉树的二叉链表存储结构 typedef struct BiTNode{ TElemType data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//先序遍历生成二叉树 Status CreatBiTree(BiTree &T){ TElemType ch,temp;printf("输入一个元素: ");scanf("%c",&ch);temp=getchar(); //结束回车 ...

二叉链表表示二叉树,复制一颗二叉树,如何用C语言算法设计,希望答案正确...
答:生成一个二叉树的结点(其数据域为item,左指针域为lptr,右指针域为rptr)BiTNode *GetTreeNode(TElemType item, BiTNode *lptr , BiTNode *rptr ){ if (!(T = (BiTNode*)malloc(sizeof(BiTNode))) exit(1); T-> data = item; T-> lchild = lptr; T-> rchild = rptr; return T;}BiTNode *...

用C语言编写程序,创建一个二叉树的二叉链表结构,然后输出从根结点到所有...
答:typedef struct node { char data;struct node lchild;struct node rchild;}tnode;tnode createtree(){ tnode t;char ch;ch=getchar();if(ch=='0')t=null;else { t=(tnode )malloc(sizeof(tnode));t->data=ch;t->lchild=createtree();t->rchild=createtree();} return t;} void...

用C语言定义二叉树的二叉链表存储结构,完成二叉树的建立,先序中序后...
答:include<malloc.h> typedef int ElemType;typedef struct LNode{ ElemType data;struct LNode *lchild,*rchild;}LNode,*TLNode;void create(TLNode * Tree){ //创建 ElemType e;scanf("%d",&e);if(e==0)Tree=NULL;else{ (*Tree)=(TLNode)malloc(sizeof(LNode));(*Tree)->data=e;pr...

...树(1) 建立一棵含有n个结点的二叉树,采用二叉链表存储;
答:printf("%c",ptr->ch);} } void main(){ printf("构建一个二叉树(结点数为n):\n");root=create(root);printf("前序遍历二叉树:\n");preorder(root);printf("\n");printf("中序遍历二叉树:\n");inorder(root);printf("\n");printf("后序遍历二叉树:\n");postorder(root);...

用C语言建立一棵二叉树,使用二杈链表存储,对其进行后续遍历,输出后序...
答:include<stdlib.h> define Maxsize 100 typedef int datatype;typedef struct node { datatype data;struct node* lchild;struct node* rchild;}BTNode;void CreatBTNode(BTNode *&b,char * str){ BTNode *p,*st[Maxsize];int top=-1;p=NULL;b=NULL;int j=0,k;char ch=str[j];while(ch...

用C语建立一棵二叉树并进行前序遍历。
答://以二叉链表作为存储结构,初始化和遍历都要用非递归算法。include<iostream> using namespace std;typedef int T;//template<class T> class list { public:list create_list();void bef_list(list root);private:T data;list lchild,rchild;};list list::create_list(){ list temp[100];lis...

以二叉链表为存储结构,如何编写算法求二叉树中结点x的双亲?
答:如下代码是通过算法的方式求父节点,其中二叉树的创建是先序方式,如abd##e##c include "stdlib.h"typedef int Element;struct Tree { Element data;struct Tree *left;struct Tree *right;};void CreateBinSortTree(struct Tree **t);void InsertNode2Tree(struct Tree **root, Element num);voi...