教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

编写算法在二叉排序树上找出任意两个不同节点的最近公共祖先

来源:网络收集 时间:2026-05-05
导读: 源代码: #include \#include \typedef struct node { int data; struct node *lchild,*rchild; }Bit; Bit *InBitree(Bit *S,Bit *T){ //将数据插入一个二叉排序树中 Bit *p; p=T; while(1){ if(S->data datap->lchild==NULL){ p->lchild=S; break; } else i

源代码:

#include \#include \typedef struct node {

int data;

struct node *lchild,*rchild; }Bit;

Bit *InBitree(Bit *S,Bit *T){ //将数据插入一个二叉排序树中 Bit *p; p=T;

while(1){

if(S->datadata&&p->lchild==NULL){ p->lchild=S; break; }

else if(S->datadata&&p->lchild!=NULL) p=p->lchild;

else if(S->data>p->data&&p->rchild==NULL){ p->rchild=S; break; }

else if(S->data>p->data&&p->rchild!=NULL) p=p->rchild; }

return T; }

Bit *SetBitree(){ //创建一个二叉排序树 Bit *T,*S; int a; T=NULL;

printf(\输入数据创建一个二叉排序树,以0结束!\\n\ scanf(\ while(a!=0){

S=(Bit *)malloc(sizeof(Bit)); S->data=a;

S->lchild=S->rchild=NULL; if(T==NULL) T=S; else

T=InBitree(S,T); scanf(\ }

return T;

}

Bit *SearchBitree(Bit *T,int a,int b){ //查找两结点的最近公共祖先结点 Bit *p,*q; p=q=T;

while(p!=NULL){

if(adata&&bdata){ q=p;

p=p->lchild; }

else if(a>p->data&&b>p->data){ q=p;

p=p->rchild; }

else if((adata&&b>p->data)||(a>p->data&&bdata)) return p;

else if(a==p->data||b==p->data) return q; } }

void main(){ Bit *T,*Q; int x1,x2; T=SetBitree(); if(T==NULL)

printf(\二叉排序树创建失败,请从新创建!\\n\ else {

printf(\请输入两个结点:\\n\ scanf(\ Q=SearchBitree(T,x1,x2);

printf(\结点%d与结点%d的最近公共祖先结点是%d!\\n\} }

编写算法在二叉排序树上找出任意两个不同节点的最近公共祖先.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/607835.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)