问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求二叉树的基本算法和各种遍历算法

发布网友 发布时间:2022-04-24 21:09

我来回答

1个回答

热心网友 时间:2022-04-18 09:10

#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef char TElemType;
typedef int Status;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
Status CreateBiTree(BiTree &T) //按先序次序输入二叉树中结点的值,构造二叉树链表
{
char ch;
ch=getchar();
if(ch==' ')
T=NULL;
else
{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
Status PreOrder(BiTree T) //先序遍历的递归算法
{
if(T)
{
cout<<T->data;
PreOrder(T->lchild);
PreOrder(T->rchild);
}
return OK;
}
Status InOrder(BiTree T) //中序遍历的递归算法
{
if(T)
{
InOrder(T->lchild);
cout<<T->data;
InOrder(T->rchild);
}
return OK;
}
Status PostOrder(BiTree T) //后续遍历的递归函数
{
if(T)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
cout<<T->data;
}
return OK;
}
Status BiTreeLevelOrder(BiTree T) //层序遍历的非递归函数
{
int front=0,rear=0;
BiTree p,Q[20];
if(T)
{
rear++;
Q[rear]=T;
}
while(front!=rear)
{
front++;
p=Q[front];
cout<<p->data;
if(p->lchild)
{
rear++;
Q[rear]=p->lchild;
}
if(p->rchild)
{
rear++;
Q[rear]=p->rchild;
}
}
return OK;
}
Status BiTreeNodeSum(BiTree T) //计算二叉树的结点数
{

if(T==NULL)
return 0;
else
return 1+BiTreeNodeSum(T->lchild)+BiTreeNodeSum(T->rchild);
}
Status BiTreeLeafSum(BiTree T) //计算二叉树的叶子结点数
{
if(T==NULL)
return 0;
else
if(T->lchild==NULL&&T->rchild==NULL)
return 1;
else
return BiTreeLeafSum(T->lchild)+BiTreeLeafSum(T->rchild);
}
Status BiTreeDeep(BiTree T) //计算二叉树的深度
{
if(T==NULL)
return 0;
else
return (BiTreeDeep(T->lchild)>BiTreeDeep(T->rchild))?(BiTreeDeep(T->lchild)+1):(BiTreeDeep(T->rchild)+1);
}

void main() //主函数
{
BiTree T;
cout<<"input Bitree char:"<<endl;
CreateBiTree(T);
cout<<"先序遍历为:"<<endl;
PreOrder(T);
cout<<endl;
cout<<"中序遍历为:"<<endl;
InOrder(T);
cout<<endl;
cout<<"后序遍历为:"<<endl;
PostOrder(T);
cout<<endl;
cout<<"层序遍历为:"<<endl;
BiTreeLevelOrder(T);
cout<<endl;
BiTreeNodeSum(T);
cout<<"二叉树的结点数:"<<BiTreeNodeSum(T)<<endl;
BiTreeLeafSum(T);
cout<<"二叉树的叶子结点数为:"<<BiTreeLeafSum(T)<<endl;
BiTreeDeep(T);
cout<<"二叉树的深度为:"<<BiTreeDeep(T)<<endl;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 二叉树的深度算法怎么算啊 怎么计算二叉树高度? 二叉树的运算 二叉树 的 常用公式 谁能和新手 说说啊! 二叉树的基本运算 二叉树算法是什么? 二叉树运算的基本运算 在锻炼腿部的时候,应当注意哪些问题? 小腿经常抽筋是哪里的问题? 小腿水肿是哪里有问题 腿部形体问题 晚上睡觉小腿老抽筋,除缺钙以外,当心这哪些部位出问题? 通常血脂有问题的人,腿部会有哪些异常出现呢? 如何解决腿部问题? 腿部肌肉僵硬会带来哪些问题? 血脂有问题,腿部会有哪些异常? 老年人腿疼未必都是“老寒腿”,很有可能是身体的哪个部位出现了问题? 除了缺钙之外,孕期腿疼还可能哪里出现问题了? 大家的腿部问题主要都有哪些 腿疼是什么原因? 完全二叉树的算法 数据结构二叉树的基本操作~~~ 二叉树的性质有些啊?怎么求它的深度? 关于二叉树的计算 编写一个程序,实现二叉树的各种基本运算 二叉树的基本操作?? 二叉树的基本操作 如何把AI文件转成CDR文件,其他 ai设计软件如何转cdr的文件? 中国五冶电商平台有效期怎么填 中冶集团电子商务平台改为中国五矿电子商务平台为什么 以前的账号不能登录 五矿电子商务有限公司怎么样? 中国五矿集团有限公司电子商务平台怎么缴纳标书费 五阿哥是什么意思 小狗护食越打越凶 五矿发展被立案调查,你知道是什么原因吗? 狗狗护食咬主人,你打他 他会反抗更凶 怎么办 钢铁电商平台有哪些? 家里狗狗咬人,越打越凶..怎么办 深圳市五矿电商小额贷款有限公司怎么样?