下列代码要创建一个上图所示的二叉树(静态建立,如果要实现动态建立要用到递归,那个我还没学)
我们下面要建立的二叉树比较低级,就一个初始化和一个先序遍历的功能。
以后我学会的其他二叉树的操作一定会以一个萌新的视角分享自己的理解给大家,希望大佬们多多包涵。
先序遍历是先访问根节点然后访问左子树和右子树的一种二叉树的遍历方式。
另外二叉树还有另外两种遍历方式,中序遍历和后序遍历。
中序遍历是先访问左子树再访问根节点再访问右子树。
后续遍历是先访问左子树再访问右子树再访问根节点。
要确定一棵二叉树长什么亚子,我们只需要它的先序遍历和中序遍历或者后序遍历和中序遍历的结果就行了。
下面是代码:
1.每个结点包括左指针域(存放其左子树的根节点地址)和右指针域(存放其右子树的根节点地址)和它的数据域(存放有效数据)。
2.叶结点(指的是没有左子树和右子树的结点)的指针域要指向NULL。其他没有子树的结点的相对应的指针域也是同理。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Treeknot//这是我们树的结点
{
char data;
struct Treeknot* pleft;
struct Treeknot* pright;
}tknot,*ptknot;
ptknot init_(void);//初始化
void pretraverse(ptknot); //遍历
int main(void)
{
ptknot pt;
pt = init_();//括号里面不要加void不然会报错
pretraverse(pt);
return 0;
}
ptknot init_(void)
{
ptknot pA = (ptknot)malloc(sizeof(tknot));//以此建立七个结点
ptknot pB = (ptknot)malloc(sizeof(tknot));
ptknot pC = (ptknot)malloc(sizeof(tknot));
ptknot pD = (ptknot)malloc(sizeof(tknot));
ptknot pE = (ptknot)malloc(sizeof(tknot));
ptknot pF = (ptknot)malloc(sizeof(tknot));
ptknot pG = (ptknot)malloc(sizeof(tknot));
pA->data = 'A';
pB->data = 'B';
pC->data = 'C';
pD->data = 'D';
pE->data = 'E';
pF->data = 'F';
pG->data = 'G';
pA->pleft = pB;//将各个结点按照上图所示依次相连。
pB->pleft = pD;
pB->pright = NULL;
pD->pleft = pD->pright = NULL;
pA->pright = pC;
pC->pleft = NULL;
pC->pright = pE;
pE->pleft = pF;
pE->pright = pG;
pF->pleft = pF->pright = NULL;
pG->pleft = pG->pright = NULL;
return pA;
}
void pretraverse(ptknot p)
{
if(p != NULL)
{
printf("%c\n",p->data);
pretraverse(p->pleft);
pretraverse(p->pright);
}
}