这是一个利用数组来初始化一个二叉树,初始化的树是一个完全二叉树,并利用三种遍历算法实现遍历
#include <iostream>
using namespace std;
#define N 20
int Number[N];
//根据数组建立一个二叉堆
typedef struct BiTreeNode
{
int val;
struct BiTreeNode *left;
struct BiTreeNode *right;
}Node;
void creBiTreeNode(int *p,int num,Node *cur,int curIndex);
Node* creBiTree(int *p,int num);
void travBiTree0(Node *head);//前序
void travBiTree1(Node *head);//中序
void travBiTree2(Node *head);//后序
int main()
{
for(int i=0;i<N;i++)
Number[i]=i;
Node* head=creBiTree(Number,N);
travBiTree0(head);
cout<<endl;
travBiTree1(head);
cout<<endl;
travBiTree2(head);
cout<<endl;
getchar();
};
void creBiTreeNode(int *p,int num,Node *cur,int curIndex)
{
if (p==NULL||num<=0||cur==NULL||curIndex>=num||curIndex<0)
{
return ;
}
int last=num-1;
if (2*curIndex+1<=last)
{
cur->left=new Node;
cur->left->val=p[2*curIndex+1];
}
else
{
cur->left=NULL;
}
if (2*curIndex+2<=last)
{
cur->right=new Node;
cur->right->val=p[2*curIndex+2];
}
else
{
cur->right=NULL;
}
creBiTreeNode(p, num,cur->left,2*curIndex+1);
creBiTreeNode(p, num,cur->right,2*curIndex+2);
}
Node* creBiTree(int *p,int num)
{
if (p==NULL||num<=0)
{
return NULL;
}
Node *head=new Node;
head->val=p[0];
creBiTreeNode(p, num,head,0);
return head;
}
void travBiTree0(Node *head) //前序遍历 中左右
{
if (head==NULL)
{
return;
}
cout<<head->val<<"\t";
travBiTree0(head->left);
travBiTree0(head->right);
}
void travBiTree1(Node *head) //中序遍历 左中右
{
if (head==NULL)
{
return;
}
travBiTree1(head->left);
cout<<head->val<<"\t";
travBiTree1(head->right);
}
void travBiTree2(Node *head) //后序遍历 左右中
{
if (head==NULL)
{
return;
}
travBiTree2(head->left);
travBiTree2(head->right);
cout<<head->val<<"\t";
}