6.3.1遍历二叉树
发布日期:2021-06-30 10:49:21
浏览次数:2
分类:技术文章
本文共 1512 字,大约阅读时间需要 5 分钟。
遍历二叉树(traversing binary tree)
从根结点出发,按照某种次序,依次访问二叉树中所有结点,使得每个结点被访问次仅此一次。
先序遍历:
若二叉树为空,则空操作。否则
1.访问跟结点;
2.先遍历左子树;
3.先遍历右子树。
中序遍历:
若二叉树为空,则空操作。否则
1.先遍历左子树;
2.访问跟结点;
3.先遍历右子树。
后序遍历:
若二叉树为空,则空操作。否则
1.先遍历右子树。
2.先遍历左子树;
3.访问跟结点;
下面给出一张图:
那么,他的遍历。我们来看看。
先序遍历为:ABDHIEJCFKG。
中序遍历为:HDIBEJAFKCG。
后续遍历为:HIDJEBKFGCA。
下面我们来演示代码操作。
代码是按照先序遍历的输入,然后输出他们所在的层数。
下面是代码:
#include运行结构如下:#include #include typedef char Elemtype;typedef struct BiTNode{ char data; struct BiTNode *lchild, *rchild;}BiTNode,*BiTree;//要求用户按照前序遍历输入数据void CreateBiTree(BiTree *T){ char c; scanf_s("%c", &c); if ('$' == c) { *T = NULL; } else { *T = (BiTNode *)malloc(sizeof(BiTNode)); (*T)->data = c; CreateBiTree(&(*T)->lchild); //创建左子树 CreateBiTree(&(*T)->rchild); //创建右子树 }}//访问二叉树结点操作void visit(char c, int level){ printf_s("%c位于第%d层\n", c, level);}//遍历二叉树void PreOrderTraverse(BiTree T, int level){ if (T) { visit(T->data, level); PreOrderTraverse(T->lchild, level + 1); PreOrderTraverse(T->rchild, level + 1); }}int main(){ int level = 1; BiTree T = NULL; CreateBiTree(&T); PreOrderTraverse(T, level); system("pause"); return 0;}
下面来解释下。这个$,就是当某个子树他没有左孩子,或者右孩子的时候为NULL,用$代表NULL
如下图所示:
那么这个树的先序遍历为:
ABDH$$I$$E$J$$CF$K$$G$$
那么中序遍历和后续遍历呢?
只需要改变下面这个代码就可以了:
中序遍历:
PreOrderTraverse(T->lchild, level + 1); visit(T->data, level); PreOrderTraverse(T->rchild, level + 1);
后续遍历:
PreOrderTraverse(T->lchild, level + 1); PreOrderTraverse(T->rchild, level + 1); visit(T->data, level);
转载地址:https://it1995.blog.csdn.net/article/details/55826458 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月18日 16时24分36秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
删除oracle数据库的所有表
2019-04-30
Maven build的错误解决
2019-04-30
把maven 的web工程部署到远程的tomcat上
2019-04-30
Java 获取一个月的总天数
2019-04-30
Layui laytpl模板引擎的学习
2019-04-30
Jfinal HttpKit.post(url,data)源码解析
2019-04-30
VBA入门
2019-04-30
Excel 防止一列重复输入
2019-04-30
tomcat 高并发配置 与优化
2019-04-30
ORA-12519错误的解决方案
2019-04-30
ORACLE DIRECTORY目录管理
2019-04-30
ORA-39006错误原因及解决办法
2019-04-30
Oracle 查询数据库有多少张表
2019-04-30
VBA工作表的操作详解
2019-04-30
ORA-01940:无法删除当前已连接的用户
2019-04-30
Oracle exp/imp 导入导出命令
2019-04-30
Orcle DBA学习笔记(角色,对象,权限,用户,索引,视图,同义词,序列)
2019-04-30
Oracle 字符串函数总结
2019-04-30
Oracle 数值函数和日期函数总结
2019-04-30
Oracle 之常用分析函数
2019-04-30