<mark>链表实现,递归实现</mark>
输入格式:按照前序遍历输入
注意:建二叉树时参数有两种方式传参
- 参数为结构体指针的引用
- 参数为结构体指针的指针
<mark>推荐使用第一种</mark>
<mark>第一种:参数为结构体指针的引用</mark>
void creatTree(TREE &T)//参数记得传结构体指针的引用
{
int element;
cin>>element;
if(element==NIL)
T=NULL;
else
{
T=(TREE)malloc(sizeof(Tree));
T->data=element;
printf("输入%d的左子节点的值:",element);
creatTree(T->lChild);
printf("输入%d的右子节点的值:",element);
creatTree(T->rChild);
}
}
<mark>第二种:参数为结构体指针的指针</mark>
void creatTree(TREE *T)
{
int element;
cin>>element;
if(element==NIL)
*T=NULL;
else
{
*T=(TREE)malloc(sizeof(Tree));
(*T)->data=element;
printf("输入%d的左子节点的值:",element);
creatTree(&(*T)->lChild);
printf("输入%d的右子节点的值:",element);
creatTree(&(*T)->rChild);
}
}
<mark>完整代码:</mark>
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
typedef long long ll;
#define maxn 1000005
#define mod 7654321
#define NIL -1
typedef struct Tree
{
int data;
Tree *lChild,*rChild;
}*TREE;
//建树
void creatTree(TREE &T)//参数记得传结构体指针的引用
{
int element;
cin>>element;
if(element==NIL)
T=NULL;
else
{
T=(TREE)malloc(sizeof(Tree));
T->data=element;
printf("输入%d的左子节点的值:",element);
creatTree(T->lChild);
printf("输入%d的右子节点的值:",element);
creatTree(T->rChild);
}
}
//前序遍历
void preTraverse(TREE T)
{
if(T==NULL)
return;
else
{
cout<<" "<<T->data;
preTraverse(T->lChild);
preTraverse(T->rChild);
}
}
//中序遍历
void inTraverse(TREE T)
{
if(T==NULL)
return;
else
{
inTraverse(T->lChild);
cout<<" "<<T->data;
inTraverse(T->rChild);
}
}
//后序遍历
void postTraverse(TREE T)
{
if(T==NULL)
return;
else
{
postTraverse(T->lChild);
postTraverse(T->rChild);
cout<<" "<<T->data;
}
}
//层序遍历
void sequenceTraverse(TREE T)
{
queue<TREE> q;
q.push(T);
while(!q.empty())
{
TREE temp=q.front();
cout<<" "<<temp->data;
if(temp->lChild!=NULL)
q.push(temp->lChild);
if(temp->rChild!=NULL)
q.push(temp->rChild);
q.pop();
}
cout<<endl;
}
/*例子: 5 4 2 -1 -1 1 -1 -1 3 7 -1 -1 -1 */
int main()
{
TREE T;
cout<<"输入根节点的值:";
creatTree(T);
preTraverse(T);
cout<<endl;
inTraverse(T);
cout<<endl;
postTraverse(T);
cout<<endl;
sequenceTraverse(T);
return 0;
}