这是一种简单的方法,没有用到递归建树,主要是感受二叉树如何建立,各节点关系如何去设置,当时上数据结构的时候,老师不教怎么写代码,期末又考代码,自己又是转专业过来的课业繁重一周七天课,没时间好好复习这门大课,因此课程结束成绩很低,于是趁着这个寒假赶紧补一补数据结构,不然考研真得考个寂寞了。
#include<iostream>
using namespace std;
typedef int ElementType;
typedef struct BiTNode {
ElementType data;
struct BiTNode* lchild,*rchild;
}BinTNode,*BinTree;
//这里我将采取最简单的建立方式,由多少个节点就先申请多少个空间
BinTree create_BinTree()
{
BinTree node1 = (BinTree)malloc(sizeof(BinTNode));
node1->data = 1; //我们为node1申请了空间,并对它的data赋值了
BinTree node2 = (BinTree)malloc(sizeof(BinTNode));
node2->data = 2; //我们为node2申请了空间,并对它的data赋值了
BinTree node3 = (BinTree)malloc(sizeof(BinTNode));
node3->data = 3; //我们为node3申请了空间,并对它的data赋值了
BinTree node4 = (BinTree)malloc(sizeof(BinTNode));
node4->data = 4; //我们为node4申请了空间,并对它的data赋值了
BinTree node5 = (BinTree)malloc(sizeof(BinTNode));
node5->data = 5; //我们为node5申请了空间,并对它的data赋值了
BinTree node6 = (BinTree)malloc(sizeof(BinTNode));
node6->data = 6; //我们为node6申请了空间,并对它的data赋值了
//以上我们申请了6个节点并对其赋予了图对应的值,接下来看看这六个节点的关系,并为了安全防止程序乱输出,要将没有左右孩子的节点的对应指针赋为NULL;
//由图观察node1,左孩子为node2,右孩子为node3
node1->lchild = node2;
node1->rchild = node3;
//由图观察node2,没有左孩子,赋为NULL,右孩子为node4
node2->lchild = NULL;
node2->rchild = node4;
//由图观察node3,没有左孩子,赋为NULL,右孩子为node5
node3->lchild = NULL;
node3->rchild = node5;
//由图观察node4,左孩子为node6,无右孩子,赋为NLLL;
node4->lchild = node6;
node4->rchild = NULL;
//由图观察node5,既没有左孩子又没有右孩子,赋为NULL
node5->lchild = NULL;
node5->rchild = NULL;
//由图观察node6,既没有左孩子又没有右孩子,赋为NULL
node6->lchild = NULL;
node6->rchild = NULL;
return node1; //这里返回node1的原因是,它是这幅图的根节点
}
//建立先序遍历二叉树函数,先序遍历的思想就是先遍历左子树输出,再遍历右子树输出
void PreOrder(BinTree T)
{
if (T != NULL) //如果该节点不为NULL
{
cout << T->data << " ";
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void InOrder(BinTree T)
{
if (T != NULL) //如果该节点不为NULL
{
InOrder(T->lchild);
cout << T->data << " ";
InOrder(T->rchild);
}
}
void PostOrder(BinTree T)
{
if (T != NULL) //如果该节点不为NULL
{
PostOrder(T->lchild);
PostOrder(T->rchild);
cout << T->data << " ";
}
}
int main()
{
BinTree root = (BinTree)malloc(6*sizeof(BinTNode)); //这里乘以6是因为我的二叉树总共有6个节点,所以对于根节点要申请6个同样大小空间的节点或者更大,反正要大于二叉树所有节点的个数
root = create_BinTree(); //调用函数创建该二叉树
cout << "先序遍历的结果是:";
PreOrder(root);
cout << endl;
cout << "中序遍历的结果是:";
InOrder(root);
cout << endl;
cout << "后序遍历的结果是:";
PostOrder(root);
cout << endl;
}
输出结果为: