树的三叉链的创建和遍历,和二叉树的不同就是结点定义多了parent,和创建函数中的部分代码不一样
图示如下
代码如下:
#include<iostream>
#include<stdlib.h>
#include<malloc.h>
#define DataType char
#define MAXSIZE 100
using namespace std;
typedef struct Node{
DataType data;
struct Node *lchild,*rchild,*parent;
}BiTree;
void CreateBiTree(BiTree *&bt)
{
BiTree *q[MAXSIZE],*p;
int i;
DataType c;
cout<<"请输入二叉树结点的编号和值:"<<endl;
cin>>i>>c;
while(i!=0&&c!='$')
{
p=(BiTree*)malloc(sizeof(BiTree));
p->data=c;
p->lchild=NULL;
p->rchild=NULL;
p->parent=NULL;
q[i]=p;
if(i!=1)
{
if(i%2==0)
{
q[i/2]->lchild=p;
p->parent=q[i/2];
}
else
{
q[i/2]->rchild=p;
p->parent=q[i/2];
}
}
cout<<"请输入二叉树结点的编号和值:"<<endl;
cin>>i>>c;
}
bt=q[1];
}
void PreOrder(BiTree *bt) //递归前序遍历二叉树
{
if(bt!=NULL)
{
printf("%c",bt->data);
PreOrder(bt->lchild);
PreOrder(bt->rchild);
}
}
void InOrder(BiTree *bt) //递归中序遍历二叉树
{
if(bt!=NULL)
{
InOrder(bt->lchild);
printf("%c",bt->data);
InOrder(bt->rchild);
}
}
void PostOrder(BiTree *bt) //递归后序遍历二叉树
{
if(bt!=NULL)
{
PostOrder(bt->lchild);
PostOrder(bt->rchild);
printf("%c",bt->data);
}
}
int main()
{
BiTree *bt;
CreateBiTree(bt);
cout<<endl;
PreOrder(bt);
cout<<endl;
InOrder(bt);
cout<<endl;
PostOrder(bt);
return 0;
}