按输入的关键字序列建立一棵二叉排序树,并删除该二叉排序树上的一个叶子结点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题:二叉树采用二叉链表结构表示。设计并实现如下算法:按输入的关键字序列建立一棵二叉排序树,并删除该二叉排序树上的一个叶子结点。

代码

/* Note:Your choice is C IDE */

/*二叉树采用二叉链表结构表示。设计并实现如下算法:按输入的关键字序列

建立一棵二叉排序树,并删除该二叉排序树上的一个叶子结点。*/

#include "stdio.h"

#include "stdlib.h"

typedef int TELemType;

typedef struct BiTNode{

TELemType data;

struct BiTNode *lchild,*rchild;

}BiTNode,*BiTree;

int SearchBST(BiTree T,int key,BiTree f,BiTree *p)

{

if(!T)

{

*p=f;

return 0;

}

if(key==T->data)

{

*p=T;

return 1;

}

if(keydata)

return SearchBST(T->lchild,key,T,p);

if(key>T->data)

return SearchBST(T->rchild,key,T,p);

return 0;

}

void InsertBST(BiTree *T,int key)

{

BiTree p,s;

if(!SearchBST(*T,key,NULL,&p))

{

s=(BiTree)malloc(sizeof(BiTNode));

s->data=key;

s->lchild=s->rchild=NULL;

if(!p)

*T=s;

else if(keydata)

{p->lchild=s; }

else

{p->rchild=s;}

}

}

void NRPreOrder(BiTree bt){/*非递归先序遍历二叉树*/

BiTree stack[100],p; int top;

if (bt==NULL) return;

top=0; p=bt;

while(!(p==NULL&&top==0))

{ while(p!=NULL)

{ printf("%3d",p->data); /*访问结点的数据域*/ if (top<99) { /*将当前指针p压栈*/

stack[top]=p; top++; }

else { printf("栈溢出");return; }

p=p->lchild; /*指针指向p的左孩子*/ }

if (top<=0) return; /*栈空时结束*/

else { top--; p=stack[top]; } /*从栈中弹出栈顶元素*/

p=p->rchild ; /*指针指向p的右孩子结点*/ }

}

int DeleteLeaf(BiTree *T)

{

if((*T)->lchild==NULL&&(*T)->rchild==NULL)

{

*T=NULL;

return 0;

}

if(*T!=NULL)

{

return DeleteLeaf(&(*T)->lchild);

return DeleteLeaf(&(*T)->rchild);

}

return 0;

}

void main()

{

BiTree T;

int i;

int key[7]={45,24,53,45,12,24,90};

T=NULL;

for(i=0;i<7;i++)

{

InsertBST(&T,key[i]);

}

NRPreOrder(T);

DeleteLeaf(&T);

printf("\n");

NRPreOrder(T);

}

相关文档
最新文档