二叉树的基本操作完整版,包含二叉树的所有操作,凡是你想要的都在(2)
if(!S->next)break; //若栈空则跳出
if(p==S->next->rchild)p=S->next; //若当前结点为栈顶指针的右孩子,则继
else{
if(S->next->rchild){ //栈顶指针右孩存在,指针移至栈顶指针的
} } p=S->next->rchild;break; 续出栈
} 右孩子后跳出循环 } if(!S->next)break; //若栈空则跳出循环 printf("\n\n"); return OK;
}//PostOrderTraverse
Status GetElemSum(BiTree T){
//计算二叉树中总结点的个数
BiTree p,*q; int l=0,h=0; if(!(q=(BiTree *)malloc(int(pow(2,TreeDepth(T,l,h))+1) * sizeof(BiTNode))))exit(ERROR); int head=1,tail=2; q[1]=T; while(head<tail){ p=q[head++];
if(p->lchild)q[tail++]=p->lchild;
if(p->rchild)q[tail++]=p->rchild;
}
return head-1;
}//GetElemSum
Status LevelOrderPrint(BiTree T){
//二叉树T存在,层序遍历二叉树
//将二叉树中的结点按从上到下,从左到右的顺序存至指针数组q,然后按次序输出
BiTree p,*q; if(!(q=(BiTree *)malloc(GetElemSum(T) * sizeof(BiTNode))))exit(ERROR); int head=1,tail=2;
q[1]=T;
printf("\n层序(非递归)遍历结果如下:\n");
while(head<tail){ p=q[head++]; printf("%-5c",p->data); if(p->lchild)q[tail++]=p->lchild; if(p->rchild)q[tail++]=p->rchild;
}
printf("\n\n");
return OK;
}//LevelOrderPrint
Status GetElemNum(BiTree T,TElemType e){
//查找元素e在二叉树T中的个数及位置
int j,i=0,num=0,*a;
BiTree p,*q; if(!(q=(BiTree *)malloc(GetElemSum(T) * sizeof(BiTNode))))exit(ERROR); if(!(a=(int *)malloc(GetElemSum(T) * sizeof(int))))exit(ERROR); int head=1,tail=2; q[1]=T; while(head<tail){ p=q[head++]; if(p->data==e){num++; a[i]=head-1;i++;} if(p->lchild)q[tail++]=p->lchild; if(p->rchild)q[tail++]=p->rchild; } printf("\n元素%c在二叉树中的个数为: %d\n",e,num); printf("元素%c在二叉树中的位置序号为:",e); for(j=0;j<i;j++){ printf("%-4d",a[j]); } printf("\n");
return num;
}//GetElemNum
Status GetLeafNum(BiTree T){
//计算二叉树T中叶子个数
BiTree p,*q;
if(!(q=(BiTree *)malloc(GetElemSum(T) * sizeof(BiTNode))))exit(ERROR); int num=0,head=1,tail=2; q[1]=T; while(head<tail){ p=q[head++]; if(!p->lchild&&!p->rchild)num++; if(p->lchild)q[tail++]=p->lchild;
if(p->rchild)q[tail++]=p->rchild;
}
return num;
}//GetLeafNum
Status LBrother(BiTree T,int sum){
//求第num个结点的左兄弟
BiTree p,*q; if(!(q=(BiTree *)malloc(GetElemSum(T) * sizeof(BiTNode))))exit(ERROR); int i,num,head=1,tail=2; char str[20]; q[1]=T; printf("请输入要查找的位置序号: "); num=NumJudge(str); if(num>sum){printf("您输入的位置序号大于有效结点个数\n");return ERROR;}; while(head<tail){ p=q[head++];
if(num==tail-2)break;
if(p->lchild)q[tail++]=p->lchild;
if(p->rchild)q[tail++]=p->rchild;
}
if(num==1)printf("位置%d的%c没有左兄弟\n",num,q[num]->data);
else{
} for(i=1;i<num;i++){ if(q[i]->lchild==q[num]||q[i]->rchild==q[num])break; } if(q[i]->lchild==q[num])printf("位置%d的%c没有左兄弟\n",num,q[num]->data); if(q[i]->rchild==q[num])printf("位置%d的%c的左兄弟为: %c\n",num,q[num]->data,q[i]->lchild->data);
return OK;
}//LBrother
Status RBrother(BiTree T,int sum){
//求第num个结点的右兄弟
BiTree p,*q; if(!(q=(BiTree *)malloc(GetElemSum(T) * sizeof(BiTNode))))exit(ERROR); int i,num,head=1,tail=2; char str[20]; q[1]=T; printf("请输入要查找的位置序号: "); num=NumJudge(str); if(num>sum){printf("您输入的位置序号大于有效结点个数\n");return ERROR;}; while(head<tail){
p=q[head++];
if(num==tail-2)break;
if(p->lchild)q[tail++]=p->lchild;
if(p->rchild)q[tail++]=p->rchild;
} if(num==1)printf("位置%d的%c没有右兄弟\n",num,q[num]->data);
for(i=1;i<num;i++){
if(q[i]->lchild==q[num]||q[i]->rchild==q[num])break; else{
}
if(!q[i]->rchild||q[i]->rchild==q[num])printf("位置%d的%c没有右兄弟\n",num,q[num]->data);
if(q[i]->rchild&&q[i]->lchild==q[num])printf("位置%d的%c的右兄弟为: %c\n",num,q[num]->data,q[i]->rchild->data);
}
return OK;
}//RBrother
Status Lchild(BiTree T,int sum){
//求第num个结点的左孩子
BiTree p,*q; if(!(q=(BiTree *)malloc(GetElemSum(T) * sizeof(BiTNode))))exit(ERROR); int num,head=1,tail=2; char str[20]; q[1]=T; printf("请输入要查找的位置序号: "); num=NumJudge(str); if(num>sum){printf("您输入的位置序号大于有效结点个数\n");return ERROR;} while(head<tail){ p=q[head++];
if(num==tail-2)break;
if(p->lchild)q[tail++]=p->lchild;
if(p->rchild)q[tail++]=p->rchild;
} if(q[num]->lchild)printf("位置%d的%c的左孩子为: %c\n",num,q[num]->data,q[num]->lchild->data);
else{printf("位置%d的%c的左孩子不存在\n",num,q[num]->data);}
return OK;
}//Lchild
Status Rchild(BiTree T,int sum){
//求第num个结点的右孩子
BiTree p,*q; if(!(q=(BiTree *)malloc(GetElemSum(T) * sizeof(BiTNode))))exit(ERROR); int num,head=1,tail=2; char str[20]; q[1]=T;
printf("请输入要查找的位置序号: "); num=NumJudge(str);
if(num>sum){printf("您输入的位置序号大于有效结点个数\n");return ERROR;} while(head<tail){
p=q[head++];
if(num==tail-2)break;
if(p->lchild)q[tail++]=p->lchild;
if(p->rchild)q[tail++]=p->rchild;
}
if(q[num]->rchild)printf("位置%d的%c的右孩 …… 此处隐藏:3878字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [教育文库]夜场KTV服务员的岗位职责及工作流程[1]
- [教育文库]企划、网络、市场绩效考核方案
- [教育文库]学党史、知党情、强党性--“党的基本理
- [教育文库]2016年高考物理大一轮总复习(江苏专版
- [教育文库]干部廉洁自律自查自纠的报告
- [教育文库]2010年北京大学心理学系拟录取硕士研究
- [教育文库]资金时间价值练习题及答案
- [教育文库]保护环境的心得体会
- [教育文库]英语角内容:英语趣味小知识
- [教育文库]档案收集与管理工作通知
- [教育文库]劳动规章制度范本范本
- [教育文库]高考物理一轮复习课后限时作业1运动的
- [教育文库]机械工艺夹具毕业设计195推动架设计说
- [教育文库]通用技术教学比赛说课稿2
- [教育文库]2018年四年级英语下册 Module 7 Unit 2
- [教育文库]第2章 宽带IP网络的体系结构
- [教育文库]九年级化学第五单元课题3《根据化学方
- [教育文库]小学英语六年级情态动词用法归纳
- [教育文库]甲级单位编制窑井盖项目可行性报告(立
- [教育文库]2016-2021年中国城市规划行业全景调研
- 高考英语听力十大场景词汇总结
- 全省领导班子思想政治建设座谈会会议精
- 人教版新课标高一英语提优竞赛试题 下
- 江西省2014年生物中考试题
- 长沙镇食品药品安全事故应急预案
- 《金刚石、石墨和C60》片段教学设计
- 福州教育学院(王旭东)
- 基于EDA音乐播放器的设计
- 9、古诗两首《夜书所见》《九月九日忆
- 小学语文课外阅读有效策略探讨
- 贵州文化产业发展成支柱产业的问卷调查
- 膀胱类癌的诊治体会(附3例报告)
- 发动机积碳产生的原因
- Configuring Code Composer Studio for
- 学生良好的心理素质如何培养点滴谈
- 46 电沉积法制备锂离子电池用硅-锂薄膜
- 美舍雅阁公司管理中各部门职责
- 去壳剥皮的小妙招
- 六自由度运动平台的仿真研究
- Pride and Prejudice(傲慢与偏见)




