|
本帖最后由 wander 于 2023-9-5 16:01 编辑
二叉树的先序遍历采用的是递归的思想,因此图1所示的二叉树可以递归实现,其 C 语言实现代码为:
图 1 二叉树
- #include <stdio.h>
- #include <string.h>
- #define TElemType int
- //构造结点的结构体
- typedef struct BiTNode{
- TElemType data;//数据域
- struct BiTNode *lchild,*rchild;//左右孩子指针
- }BiTNode,*BiTree;
- //初始化树的函数
- void CreateBiTree(BiTree *T){
- *T=(BiTNode*)malloc(sizeof(BiTNode));
- (*T)->data=1;
- (*T)->lchild=(BiTNode*)malloc(sizeof(BiTNode));
- (*T)->rchild=(BiTNode*)malloc(sizeof(BiTNode));
- (*T)->lchild->data=2;
- (*T)->lchild->lchild=(BiTNode*)malloc(sizeof(BiTNode));
- (*T)->lchild->rchild=(BiTNode*)malloc(sizeof(BiTNode));
- (*T)->lchild->rchild->data=5;
- (*T)->lchild->rchild->lchild=NULL;
- (*T)->lchild->rchild->rchild=NULL;
- (*T)->rchild->data=3;
- (*T)->rchild->lchild=(BiTNode*)malloc(sizeof(BiTNode));
- (*T)->rchild->lchild->data=6;
- (*T)->rchild->lchild->lchild=NULL;
- (*T)->rchild->lchild->rchild=NULL;
- (*T)->rchild->rchild=(BiTNode*)malloc(sizeof(BiTNode));
- (*T)->rchild->rchild->data=7;
- (*T)->rchild->rchild->lchild=NULL;
- (*T)->rchild->rchild->rchild=NULL;
- (*T)->lchild->lchild->data=4;
- (*T)->lchild->lchild->lchild=NULL;
- (*T)->lchild->lchild->rchild=NULL;
- }
- //模拟操作结点元素的函数,输出结点本身的数值
- void displayElem(BiTNode* elem){
- printf("%d ",elem->data);
- }
- //先序遍历
- void PreOrderTraverse(BiTree T){
- if (T) {
- displayElem(T);//调用操作结点数据的函数方法
- PreOrderTraverse(T->lchild);//访问该结点的左孩子
- PreOrderTraverse(T->rchild);//访问该结点的右孩子
- }
- //如果结点为空,返回上一层
- return;
- }
- int main() {
- BiTree Tree;
- CreateBiTree(&Tree);
- printf("先序遍历: \n");
- PreOrderTraverse(Tree);
- }
运行结果:先序遍历:
1 2 4 5 3 6 7
|
|