📄 bitreenode3.cpp
字号:
#include <iostream.h>
#include<malloc.h>
#include <stdlib.h>
int n; //节点个数
typedef struct BiTNode //二叉树的二叉链表存储表示
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int CreateBiTree(BiTree &T,int n) //按前序次序构造二叉链表表示的二叉树T
{
char c;int left,right;
if(n!=NULL)
{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))
exit(0);
cin>>c;
n--;
T->data=c; //生成根节点
cin>>left;
cin>>right;
if(left==-1)
T->lchild=NULL;
else
CreateBiTree(T->lchild,n); //构造左子树
if(right==-1)
T->rchild=NULL;
else
CreateBiTree(T->rchild,n); //构造右子树
}
return 1;
}
int PrintElement(char e) //输出元素e的值
{
cout<<e<<" ";
return 1;
}
int PreOrderTraverse(BiTree T,int (*Visit)(char e)) //前序遍历二叉树
{
if(T)
{
if(Visit(T->data)) //访问根节点
if(PreOrderTraverse(T->lchild,Visit)) //前序遍历左子树
if(PreOrderTraverse(T->rchild,Visit)) //前序遍历右子树
return 1;
return -1;
}
else
return 1;
}
int InOrderTraverse(BiTree T,int (*Visit)(char e)) //中序遍历二叉树
{
if(T)
{
if(InOrderTraverse(T->lchild,Visit))
if(Visit(T->data))
if(InOrderTraverse(T->rchild,Visit))
return 1;
return -1;
}
else
return 1;
}
int PostOrderTraverse(BiTree T,int (*Visit)(char e)) //后序遍历二叉树
{
if(T)
{
if(PostOrderTraverse(T->lchild,Visit))
if(PostOrderTraverse(T->rchild,Visit))
if(Visit(T->data))
return 1;
return -1;
}
else
return 1;
}
void main()
{
BiTree T;
cout<<"请输入二叉树内容:第一行为节点数n,后面的n行是节点a -1 3的形式:"<<endl;
cin>>n;
CreateBiTree(T,n);
cout<<"您输入的二叉树的前序遍历结果是:"<<endl;
PreOrderTraverse(T,PrintElement);
cout<<endl;
cout<<"您输入的二叉树的中序遍历结果是:"<<endl;
InOrderTraverse(T,PrintElement);
cout<<endl;
cout<<"您输入的二叉树的后序遍历结果是:"<<endl;
PostOrderTraverse(T,PrintElement);
cout<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -