二叉树的遍历
二叉树的结构:
typedef struct BTree {//定义二叉树的结构
char data;
struct Tree* pLchild;
struct Tree* pRchild;
}BTree,* PBTree;
创建二叉树(采用静态方法):
PBTree creat_BTree() {//创建二叉树
PBTree pA = (PBTree)malloc(sizeof(BTree));
PBTree pB= (PBTree)malloc(sizeof(BTree));
PBTree pC = (PBTree)malloc(sizeof(BTree));
PBTree pD = (PBTree)malloc(sizeof(BTree));
PBTree pE = (PBTree)malloc(sizeof(BTree));
PBTree pF = (PBTree)malloc(sizeof(BTree));
pA->data = 'A';
pB->data = 'B';
pC->data = 'C';
pD->data = 'D';
pE->data = 'E';
pF->data = 'F';
pA->pLchild = pB;
pA->pRchild = pE;
pB->pLchild = pC;
pB->pRchild = pD;
pC->pLchild = pC->pRchild = NULL;
pD->pLchild = pD->pRchild = NULL;
pF->pLchild = pF->pRchild = NULL;
pE->pLchild = pF;
pE->pRchild = NULL;
return pA;
}
当然大家也可以采用这种更为巧妙的方法:
struct tree* creatTree (struct tree* root) {
int value;
scanf("%d", &value);
if (value == -1)
return NULL;
root = (struct tree*)malloc(sizeof(struct tree));
root->data = value;
printf("请输入%d的左子树:", root->data);
root->left = creatTree(root->left);
printf("请输入%d的右子树:", root->data);
root->right = creatTree(root->right);
return root;
}
————————————————
版权声明:本文为CSDN博主「SnapTap」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43126471/article/details/90084499
先序遍历:
void pretraverse(PBTree pt) {//先序遍历二叉树
if (pt != NULL) {
printf("%3c",pt->data);//访问根节点
if (pt->pLchild != NULL) {
pretraverse(pt->pLchild);//先序遍历左子树
}
if (pt->pRchild != NULL) {
pretraverse(pt->pRchild);//先序遍历右子树
}
}
}
中序遍历:
void intraverse(PBTree pt) {
if (pt != NULL) {
if (pt->pLchild != NULL) {
intraverse(pt->pLchild);//中序遍历左子树
}
printf("%3c", pt->data);//访问根节点
if (pt->pRchild != NULL) {
intraverse(pt->pRchild);//中序遍历右子树
}
}
}
后序遍历:
void posttraverse(PBTree pt) {
if (pt != NULL) {
if (pt->pLchild != NULL) {
posttraverse(pt->pLchild);//后序遍历左子树
}
if (pt->pRchild != NULL) {
posttraverse(pt->pRchild);//后序遍历右子树
}
printf("%3c", pt->data);//访问根节点
}
}