先中后序遍历c语言完整代码
树的先中后序遍历代码
结构体定义
typedef int Element;
typedef struct BiNode {
Element data; // 保存数据
struct BiNode *lchild, * rchild; // 左孩子,右孩子
} BiNode, * BiTree;
先序遍历
// 先序遍历
void preNode(BiTree T) {
if (T != NULL) {
visit(T);
preNode(T->lchild);
preNode(T->rchild);
}
}
中序遍历
// 中序遍历
void middleNode(BiTree T) {
if (T != NULL) {
middleNode(T->lchild);
visit(T);
middleNode(T->rchild);
}
}
后序遍历
// 后序遍历
void lastNode(BiTree T) {
if (T != NULL) {
lastNode(T->lchild);
lastNode(T->rchild);
visit(T);
}
}
初始化一棵树代码
形成一颗这样的树
BiTree init(BiTree T) {
T = (BiTree)malloc(sizeof(struct BiNode));
T->data = 1;
T->lchild = NULL;
T->rchild = NULL;
return T;
}
int main() {
// 树的遍历
// 定义一个二叉树,然后再遍历
BiTree T = NULL;
T = init(T);
// 插入数据
BiTree B = insert_left(T, 2);
BiTree C = insert_right(T, 3);
insert_left(B, 4);
insert_right(B, 5);
insert_left(C, 6);
insert_right(C, 7);
return 0;
}
添加左子树和右子树的代码
// 添加左孩子
BiTree insert_left(BiTree T, Element data) {
BiTree T1 = (BiTree)malloc(sizeof(struct BiNode));
if (T1 != NULL) {
T1->data = data;
T1->lchild = NULL;
T1->rchild = NULL;
T->lchild = T1;
return T1;
}
return NULL;
}
// 添加右孩子
BiTree insert_right(BiTree T, Element data) {
BiTree T1 = (BiTree)malloc(sizeof(struct BiNode));
if (T1 != NULL) {
T1->data = data;
T1->lchild = NULL;
T1->rchild = NULL;
T->rchild = T1;
return T1;
}
return NULL;
}
查看结点
// 查看结点
void visit(BiTree T) {
cout << T->data << endl;
}
代码整合(复制粘贴即可跑)
#include <bits/stdc++.h>
using namespace std;
typedef int Element;
typedef struct BiNode {
Element data;
struct BiNode *lchild, * rchild;
} BiNode, * BiTree;
BiTree init(BiTree T) {
T = (BiTree)malloc(sizeof(struct BiNode));
T->data = 1;
T->lchild = NULL;
T->rchild = NULL;
return T;
}
// 添加左孩子
BiTree insert_left(BiTree T, Element data) {
BiTree T1 = (BiTree)malloc(sizeof(struct BiNode));
if (T1 != NULL) {
T1->data = data;
T1->lchild = NULL;
T1->rchild = NULL;
T->lchild = T1;
return T1;
}
return NULL;
}
// 添加右孩子
BiTree insert_right(BiTree T, Element data) {
BiTree T1 = (BiTree)malloc(sizeof(struct BiNode));
if (T1 != NULL) {
T1->data = data;
T1->lchild = NULL;
T1->rchild = NULL;
T->rchild = T1;
return T1;
}
return NULL;
}
// 查看结点
void visit(BiTree T) {
cout << T->data << " ";
}
// 先序遍历
void preNode(BiTree T) {
if (T != NULL) {
visit(T);
preNode(T->lchild);
preNode(T->rchild);
}
}
// 中序遍历
void middleNode(BiTree T) {
if (T != NULL) {
middleNode(T->lchild);
visit(T);
middleNode(T->rchild);
}
}
// 后序遍历
void lastNode(BiTree T) {
if (T != NULL) {
lastNode(T->lchild);
lastNode(T->rchild);
visit(T);
}
}
int main() {
// 树的遍历
// 定义一个二叉树,然后再遍历
BiTree T = NULL;
T = init(T);
// 插入数据
BiTree B = insert_left(T, 2);
BiTree C = insert_right(T, 3);
insert_left(B, 4);
insert_right(B, 5);
insert_left(C, 6);
insert_right(C, 7);
// 上面已经完成全部的结点了。要开始遍历了
cout << "先序遍历结果:";
preNode(T); // 先序遍历
cout << endl;
cout << "中序遍历结果:";
middleNode(T); // 中序遍历
cout << endl;
cout << "后序遍历结果:";
lastNode(T); //后序遍历
return 0;
}