二叉树
本次要要上传的是二叉树,有需要查看完整代码的实现可以留意喔,可以(注:这里采用的是递归方式创建喔,还有这次代码的输入方式会有点不同,看后面截图例子哟)希望有能帮上忙(●’◡’●)!上代码!!!
//二叉树的创建,先,中,后序输出(链式存储)
#include <iostream>
using namespace std;
typedef char TElemType;
typedef int Status;
typedef struct BiTNode
{
TElemType data; //结点数据域
struct BiTNode *lchild,*rchild; //左右孩子指针
}BiTNode, *BiTree;
//先序遍历创建二叉树
void CreatBiTree(BiTree &T)
{//按先序次序输入二叉树中的结点的值(一个字符),创建二叉链表表示的二叉树T
char ch;
cin>>ch;
if (ch=='#') T=NULL; //递归结束,建空树
else //递归创建二叉树
{
T=new BiTNode; //生成根结点
T->data=ch; //根结点数据域置为ch
CreatBiTree(T->lchild); //递归创建左子树
CreatBiTree(T->rchild); //递归创建右子树
}
}
//先序遍历(输出)递归
void InOrderTraverse_1(BiTree T)
{
if (T) //若二叉树非空
{
cout <<T->data<<" "; //中序遍历左子树
InOrderTraverse_1(T->lchild); //访问根结点
InOrderTraverse_1(T->rchild); //中序遍历右子树
}
}
//中序遍历(输出)递归
void InOrderTraverse_2(BiTree T)
{
if (T)
{
InOrderTraverse_2(T->lchild); //中序遍历左子树
cout <<T->data<<" "; //访问根结点
InOrderTraverse_2(T->rchild); //中序遍历右子树
}
}
//计算叶子节点个数
int LeaveCount(BiTree T)
{
if (T==NULL) return 0;
else return ((LeaveCount(T->lchild)+LeaveCount(T->rchild)+1)+1)/2; //此公式比较难理解,后面有讲解
}
//菜单
void menu()
{
cout<<"(************1.先序遍历 2.中序遍历************)"<<endl;
cout<<"(************3.后序遍历 4.计算叶子************)"<<endl;
cout<<"(************5.退出 **************)"<<endl;
}
//主函数
int main ()
{
BiTree T;
int choice;
cout <<"注意:(树是要自己在草稿上画好喔,然后以字符形式输入喔,每个字符要空开来喔)"<<endl<<endl;
cout <<"请输入你想创建的树:"<<endl;
CreatBiTree(T);
while (1)
{
cout<<endl;
menu ();
cout<<"请输入菜单序号:";
cin>>choice;
if (choice ==5) break;
switch (choice)
{
case 1:InOrderTraverse_1(T); break;
case 2:InOrderTraverse_2(T); break;
case 3:InOrderTraverse_3(T); break;
case 4:cout <<LeaveCount(T); break;
default :cout<<"亲,没有这个选项喔,要选上面的有的选项喔!!!"<<endl;
}
}
return 0;
}
这个是输入方式的例子(●’◡’●)!
好啦,以上就是整个的二叉树代码实现啦,希望能有帮助!
(一点一点的积累,慢一点,才会更快喔!(●’◡’●))。