关于二叉排行喧的问题

电脑杂谈  发布时间:2020-01-29 18:02:22  来源:网络整理

二叉树的层次遍历算法_二叉排序树中序遍历_二叉树的层次遍历

关于二叉排行喧的问题

#include <stdio.h> /*输入六庚45、24、53、12、37、9,插入数据元素13,删除数据元素24和53*/

#include <stdlib.h>

typedef struct BiTNode/*结点结构 */

{

int data;

struct BiTNode *lchild,*rchild;

}BiTNode,*BiTree;

BiTree Insert(BiTree T,int e)/*插入操譩r />{

BiTree p=T, f=NULL, s;

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

s->data=e;

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

if (T==NULL) /*插入 s 为新的根结点*/

{

T = s;

}

else

{/*查找插入位置*/

while(p && p->data!=e) /*如果当前节点不为空且节点的值不是插入的值 */

{

if (p->data>e)

{f=p; p=p->lchild;} /*如果当前节点值村入的值,约当前节点,并将节点的足妆前节点 */

else

{f=p; p=p->rchild;} /*番节点的右节点妆前节点 */

}

if (p==NULL&&e <f->data) /*如果当前节点为空以及插入的值大于父节点中的值; */

二叉排序树中序遍历_二叉树的层次遍历算法_二叉树的层次遍历

f->lchild = s;/*插入 s 为 f 的子 */

else if(p==NULL&&e>f->data) f->rchild = s; /* 插入 s 为 f 的右孩子*/

else {printf("insert wrong!");exit(0);}

}

returnT;

}

void Delete(BiTree T,int x)

{

BiTree f=NULL,p=T,q,s;

while(p&&p->data!=x)

{

if(p->data>x)/*如果节点的数值?约当前节点二叉排序树中序遍历,查找其足 */

{f=p;p=p->lchild;}

else

{f=p;p=p->rchild;}

}

if(p==NULL)

{printf("search fail!");exit(0);}

if(p->lchild==NULL)/*当前节点子为空,重接右结点灰均为空 */

{

if(f->lchild==p)/*当前节点为子(f->data>p->data)*/

f->lchild=p->rchild;

else

f->rchild=p->rchild;

free(p);

}

else if(p->rchild==NULL)/*右为空,重接足*/

二叉树的层次遍历_二叉树的层次遍历算法_二叉排序树中序遍历

{

if(f->lchild==p)

f->lchild=p->lchild;

else

f->rchild=p->lchild;

free(p);

}

else/*准不为空 */

{

q=p;

s=p->lchild;

while(s->rchild!=NULL)

{

q=s;

s=s->rchild;

}

p->data=s->data;

if(q==p)

p->lchild=s->lchild;

else

q->rchild=s->lchild; /*到此处删除工篆结束,要删除的p->data,已经被s->data代替;但是p仍然指湘蔮r /> //的节点,溢果释放二叉排序树中序遍历,约致由p派生衬子节点的地址信息全部散失在存储中,无从查找;

// free(p);*/

}

}

void Inorder(BiTree T)

{/* 中喧二叉蕇p;*/

if (T)

二叉树的层次遍历_二叉树的层次遍历算法_二叉排序树中序遍历

{

Inorder(T->lchild); /* 遍历譻p;*/

printf("%d ",T->data);/*访问结点 */

Inorder(T->rchild);/* 遍历右子牲br />}

}这段程写实现中喧的,望高手给解释下。

void Menu(BiTree T)

{

int i,e;

printf("1.input\n");

printf("2.delete\n");

printf("3.end\n");

printf("choice:\n");

scanf("%d",&i);

switch(i)

{

case1:

printf("input element:");

scanf("%d",&e);

T=Insert(T,e);

printf("inorder:\n");

Inorder(T);

printf("\n");

break;

case2:

printf("delete element:");

scanf("%d",&e);

Delete(T,e);

二叉树的层次遍历_二叉排序树中序遍历_二叉树的层次遍历算法

printf("inorder:\n");

Inorder(T);

printf("\n");

break;

default:

exit(0);

break;

}

Menu(T);

}

void main()

{

int e,i;

BiTree T;

T=NULL;

printf("input 6 num:\n");

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

{

scanf("%d",&e);

T=Insert(T,e);

}

printf("inorder:\n");

Inorder(T);

printf("\n");

Menu(T);

getch();

}

搜肃相关帜帖子:遍历


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-138891-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...