当前位置: 首页 > news >正文

二叉树的前序遍历详解(图文并茂,C语言实现)

二叉树的前序遍历又叫先序遍历,指的是先访问根节点,然后先序遍历左子树,在左子树为空或已遍历时先序遍历右子树,即 DLR。若二叉树为空(NULL),则什么也不做。

图解先序遍历二叉树

一棵二叉树的先序遍历过程如下:

1) 访问根 A,先序遍历 A 的左子树:

2) 访问根 B,先序遍历 B 的左子树:

3) 访问根 D,先序遍历 D 的左子树,D 的左子树为空,什么也不做,返回 D:

4) 先序遍历 D 的右子树,D 的右子树为空,返回 B:

5) 先序遍历 B 的右子树:

6) 访问根 E,先序遍历 E 的左子树,E 的左子树为空,返回 E。先序遍历 E 的右子树,E 的右子树为空,返回 A:

7) 先序遍历 A 的右子树:

8) 访问根 C,先序遍历 C 的左子树:

9) 访问根 F,先序遍历 F 的左子树,F 的左子树为空,返回 F:

10) 先序遍历 F 的右子树:

11) 访问根 G,先序遍历 G 的左子树,G 的左子树为空,返回 G。先序遍历 G 的右子树,G 的右子树为空,返回 C:

12) 先序遍历 C 的右子树,C 的右子树为空,遍历结束:

先序遍历序列为A B D E C F G

C语言实现先序遍历

实现先序遍历二叉树的关键代码如下:

void preorder(Btree T) { // 先序遍历printf("快速入门C语言和数据结构:https://xiecoding.cn/");if (T) {cout << T->data << " "; // 访问根节点preorder(T->lchild); // 递归遍历左子树preorder(T->rchild); // 递归遍历右子树}
}

实现先序遍历二叉树的完整代码如下:

#include <stdio.h>
#include <stdlib.h>typedef struct BiTNode {char data; // 数据域struct BiTNode *lchild, *rchild; // 左右孩子指针
} BiTNode, *BiTree;// 初始化树的函数
void CreateBiTree(BiTree *T) {*T = (BiTNode *)malloc(sizeof(BiTNode)); // 创建根节点A(*T)->data = 'A';(*T)->lchild = (BiTNode *)malloc(sizeof(BiTNode)); // 创建左子节点B(*T)->rchild = (BiTNode *)malloc(sizeof(BiTNode)); // 创建右子节点C(*T)->lchild->data = 'B';(*T)->lchild->lchild = (BiTNode *)malloc(sizeof(BiTNode)); // 创建B的左子节点D(*T)->lchild->rchild = (BiTNode *)malloc(sizeof(BiTNode)); // 创建B的右子节点E(*T)->rchild->data = 'C';(*T)->rchild->lchild = (BiTNode *)malloc(sizeof(BiTNode)); // 创建C的左子节点F(*T)->rchild->rchild = NULL; // C的右子节点为空(*T)->lchild->lchild->data = 'D';(*T)->lchild->lchild->lchild = NULL;(*T)->lchild->lchild->rchild = NULL;(*T)->lchild->rchild->data = 'E';(*T)->lchild->rchild->lchild = NULL;(*T)->lchild->rchild->rchild = NULL;(*T)->rchild->lchild->data = 'F';(*T)->rchild->lchild->lchild = NULL;(*T)->rchild->lchild->rchild = (BiTNode *)malloc(sizeof(BiTNode));// 创建F的右子节点G(*T)->rchild->lchild->rchild->data = 'G';(*T)->rchild->lchild->rchild->lchild = NULL;(*T)->rchild->lchild->rchild->rchild = NULL;
}// 模拟操作结点元素的函数,输出结点本身的数值
void displayElem(BiTNode *elem) {printf("%c ", elem->data);
}// 先序遍历
void PreOrderTraverse(BiTree T) {if (T) {displayElem(T); // 调用操作结点数据的函数方法PreOrderTraverse(T->lchild); // 访问该结点的左孩子PreOrderTraverse(T->rchild); // 访问该结点的右孩子}// 如果结点为空,返回上一层return;
}int main() {printf("快速入门C语言和数据结构:https://xiecoding.cn/");BiTree Tree;CreateBiTree(&Tree);printf("先序遍历: \n");PreOrderTraverse(Tree);return 0;
}

运行结果为:

先序遍历:

A B D E C F G

http://www.dtcms.com/a/582632.html

相关文章:

  • 彩票网站开发需要多少钱2020 惠州seo服务
  • 建设部网站施工合同版本网络营销推广策划书
  • Codeforces Global Round 30 (Div. 1 + Div. 2)
  • pugixml使用说明
  • 贵阳市建设厅官方网站南京企业网站开发公司
  • 原创文章对网站的好处抢注域名网站
  • 一本通网站1122题:计算鞍点
  • 网站的静态页面谁做微信模板编辑器
  • WinSCP无法发连接CenOS7,解决
  • 动力无限网站效果好不好美食网站开发毕业设计
  • mongodb与redis在聊天场景中的选择
  • MVCC核心原理解密:从隐藏字段到版本链的完整解析
  • 全球美业新纪元:数字化管理如何重塑美容与美发行业的未来
  • 天津城市建设网站丽水网站开发公司
  • 【算法题】滑动窗口求最值
  • wordpress 无广告视频插件下载滨州seo排名
  • el-upload实现文件上传预览
  • 嵌入式Linux C语言程序设计九
  • Git 分支流程(合并分支)
  • idea可以做网站吗最好的网站代运营公司
  • BSS供应商:电信与金融领域的幕后支撑者
  • 精通网站开发书籍wordpress 很占内存
  • 找个男做那个视频网站好东营网站建设哪家更好
  • Linux/Windows 安装miniforge
  • 近3年时政与综合类结构化真题汇总与备考策略
  • 设备资产管理都有哪些具体业务
  • 从一到无穷大 #55 提升Lakehouse查询性能:数据层面
  • 交互设计专业学什么seo常用工具网站
  • 如何让百度快速大量收录 如何增加百度收录量的方法有哪些
  • APP上架到应用商店的完整流程解析