结构体的定义
typedef struct bitnode //定义二叉树节点数据类型
{
ElementType data;
struct bitnode *left, *right;
} bitnode, *bitree;
函数
先序创建二叉树
void PerCreateTree(bitree &T)
{
ElementType item;
cin >> item;
if( item == 0 ) //叶节点数据标志:其后根两个0
T = NULL; //若某一节点为叶子结点,则其左右子树均为NULL,0表示建空树
else
{
T = new bitnode;
T->data = item;
PerCreateTree(T->left);
PerCreateTree(T->right);
}
}
先序遍历二叉树
void PerOrder(bitree T)
{
if( T ) // T != NULL
{
cout << T->data << " ";
PerOrder(T->left);
PerOrder(T->right); /
}
}
中序遍历二叉树
void InOrder(bitree T) //
{
if(T)
{
InOrder(T->left);
cout<<T->data<<" ";
InOrder(T->right);
}
}
后序遍历二叉树
void PostOrder(bitree T)
{
if(T)
{
PostOrder(T->left);
PostOrder(T->right);
cout<<T->data<<" ";
}
}
输入的格式
借用大佬的二叉树示意图
如上图所示,想输入这样一棵二叉树,应先输入根结点,再输入左结点,最后输入右结点。
格式为:1 2 4 0 0 5 0 0 3 0 0
最后结果如右图所示:
以下为全部代码
#include <iostream>
using namespace std;
typedef int ElementType;
typedef struct bitnode //定义二叉树节点数据类型
{
ElementType data;
struct bitnode *left, *right;
} bitnode, *bitree;
void PerCreateTree(bitree &T) //先序创建一棵二叉树
{
ElementType item;
cin >> item;
if( item == 0 ) //叶节点数据标志:其后根两个0
T = NULL; //若某一节点为叶子结点,则其左右子树均为NULL,0表示建空树
else
{
T = new bitnode;
T->data = item;
PerCreateTree(T->left);
PerCreateTree(T->right);
}
}
void PerOrder(bitree T) //先序递归遍历二叉树
{
if( T )
{
cout << T->data << " ";
PerOrder(T->left);
PerOrder(T->right);
}
}
void InOrder(bitree T) //中序递归遍历二叉树
{
if(T)
{
InOrder(T->left);
cout<<T->data<<" ";
InOrder(T->right);
}
}
void PostOrder(bitree T) //后序递归遍历二叉树
{
if(T)
{
PostOrder(T->left);
PostOrder(T->right);
cout<<T->data<<" ";
}
}
int main()
{
bitree root;
PerCreateTree(root);
cout << "先序遍历:";
PerOrder(root);
cout << "\n";
cout << "中序遍历:";
InOrder(root);
cout << "\n";
cout << "后序遍历:";
PostOrder(root);
cout << "\n";
return 0;
}