二叉树是的每个节点的度都不超过2,二叉树的左右两个节点是有序的,所以二叉树可以用有序的编号来表示节点,假设编号为1的是根节点,那么节点A的做节点编号是A/2,右节点的编号是A/2+1.我们可以用一个数组来表示节点编号。二叉树的遍历通常用递归方法。
// 二叉树.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#define MAX 5
struct TreeNode
{
int data;
struct TreeNode *Lchild;
struct TreeNode *Rchild;
};
TreeNode *CreateTree()
{
TreeNode **BTree;
BTree=(TreeNode**)malloc(sizeof(TreeNode*)*MAX);
for(int i=1;i<=MAX;i++)
{
TreeNode *node=(TreeNode*)malloc(sizeof(TreeNode));
cin>>node->data;
node->Lchild=NULL;
node->Rchild=NULL;
BTree[i]=node;
if(i!=1)
{
if(i%2==0)
BTree[i/2]->Lchild=node;
else
BTree[i/2]->Rchild=node;
}
}
return BTree[1];
}
void CreateTree1(TreeNode *&node)
{
int a;
cin>>a;
if(a==0)
node=NULL;
else
{
node=(TreeNode*)malloc(sizeof(TreeNode));
node->data=a;
TreeNode L;
TreeNode R;
CreateTree1(node->Lchild);
CreateTree1(node->Rchild);
}
}
void aheadTree(TreeNode *node)
{
if(node!=NULL)
{
cout<<node->data<<endl;
aheadTree(node->Lchild);
aheadTree(node->Rchild);
}
}
void BehindTree(TreeNode *node)
{
if(node!=NULL)
{
BehindTree(node->Lchild);
BehindTree(node->Rchild);
cout<<node->data<<endl;
}
}
void MidTree(TreeNode *node)
{
if(node!=NULL)
{
MidTree(node->Lchild);
cout<<node->data<<endl;
MidTree(node->Rchild);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
//TreeNode *node=CreateTree();
//cout<<"-----------前序遍历--------------"<<endl;
//aheadTree(node);
//cout<<"-----------中序遍历--------------"<<endl;
//MidTree(node);
//cout<<"-----------后序遍历--------------"<<endl;
//BehindTree(node);
TreeNode *node=NULL;
CreateTree1(node);
cout<<"-----------前序遍历--------------"<<endl;
aheadTree(node);
cout<<"-----------中序遍历--------------"<<endl;
MidTree(node);
cout<<"-----------后序遍历--------------"<<endl;
BehindTree(node);
return 0;
}