一、二叉树构建
二叉树构建通过函数的递归实现
代码实现如下
#include<iostream>
#include<stdlib.h>
using namespace std;
struct tree{
struct tree *Ltree;
struct tree *Rtree;
int data;
};
struct tree *creat_tree()
{
struct tree *node;
int data;
cin>>data;
getchar();
if(data==-1)//输入-1代表此节点下子树不存数据,结束递归
{
return NULL;
}
else
{
node=(struct tree*)malloc(sizeof(struct tree));
node->data=data;
node->Ltree=creat_tree();
node->Rtree=creat_tree();
}
}
int main()
{
struct tree *flag;
flag=creat_tree();
return 0;
}
二、二叉树的遍历
二叉树的遍历主要分四种:先序、中序、后续、层次遍历
先序遍历 先根 再左 再右
中序遍历 先左 再根 再右
后序遍历 先左 再右 再根、
层次遍历就是一层一层遍历;
代码实现先、中、后序遍历如下:
#include<iostream>
#include<stdlib.h>
using namespace std;
struct tree{
struct tree *Ltree;
struct tree *Rtree;
int data;
};
struct tree *creat_tree()
{
struct tree *node;
int data;
int temp;
cin>>data;
temp=getchar();
if(data==-1)//输入-1代表此节点下子树不存数据,结束递归
{
return NULL;
}
else
{
cout<<data<<endl;
node=(struct tree*)malloc(sizeof(struct tree));
node->data=data;
node->Ltree=creat_tree();
node->Rtree=creat_tree();
return node;
}
}
void xianxu(struct tree *flag)//先序遍历
{
if(flag==NULL)
return;
cout<<flag->data<<' ';
xianxu(flag->Ltree);
xianxu(flag->Rtree);
}
void zhongxu(struct tree *flag)//中序遍历
{
if(flag==NULL)
return;
zhongxu(flag->Ltree);
cout<<flag->data<<' ';
zhongxu(flag->Rtree);
}
void houxu(struct tree *flag)
{
if(flag==NULL)
return;
houxu(flag->Ltree);
houxu(flag->Rtree);
cout<<flag->data<<' ';
}
int main()
{
struct tree *flag;
flag=creat_tree();
xianxu(flag);
cout<<endl;
zhongxu(flag);
cout<<endl;
houxu(flag);
return 0;
}