C/C++实现二叉树的遍历(深度优先,广度优先)
二叉树的遍历
广度优先遍历
·层次遍历
深度优先遍历
1.前序遍历
2.中序遍历
3.后序遍历
完整代码:
#include<iostream>
using namespace std;
typedef char Type;
//@lining
//二叉树存储结构:二叉链表
typedef struct B
{Type data;struct B* LChild;struct B* RChild;
}BiTreeNode, * BiTree;
//二叉树的深度
int BiTreeDepth(BiTree& T)
{int i, j;if (!T)return 0;if (T->LChild)i = BiTreeDepth(T->LChild);elsei = 0;if (T->RChild)j = BiTreeDepth(T->RChild);elsej = 0;return i > j ? i + 1 : j + 1;
}
//销毁树
void DestroyBiTree(BiTree& T)
{if (T){if (T->LChild) /* 有左孩子 */DestroyBiTree(T->LChild); /* 销毁左孩子子树 */if (T->RChild) /* 有右孩子 */DestroyBiTree(T->RChild); /* 销毁右孩子子树 */delete T; /* 释放根结点 */T = NULL; /* 空指针赋0 */}
}
//构造空二叉树T
void InitBiTree(BiTree& T)
{T = NULL;return;
}
//先序建立二叉树
void CreatBitree(BiTree& T)//传入指针引用
{Type ch;cin >> ch;if (ch == '#'){T = NULL;}else{T = new BiTreeNode;T->data = ch;//递归CreatBitree(T->LChild);//构造左子树CreatBitree(T->RChild);//构造右子树}
}
//层序遍历二叉树
void LevelorderBitree(BiTree& T)
{if (!T){return;}BiTree Q[100], q = NULL;//front作为输出索引,rear作为存储索引int front = -1, rear = -1;if (!T){return;}Q[++rear] = T;while (front != rear){q = Q[++front];cout << q->data << " ";if (q->LChild != NULL){Q[++rear] = q->LChild;}if (q->RChild != NULL){Q[++rear] = q->RChild;}}
}
//先序遍历二叉树
void PreorderBitree(BiTree T)
{if (!T){return;}cout << T->data << " ";PreorderBitree(T->LChild);PreorderBitree(T->RChild);
}
//中序遍历二叉树
void MediumorderBitree(BiTree T)
{if (!T){return;}MediumorderBitree(T->LChild);cout << T->data << " ";MediumorderBitree(T->RChild);
}
//后序遍历二叉树
void PostorderBitree(BiTree T)
{if (!T){return;}PostorderBitree(T->LChild);PostorderBitree(T->RChild);cout << T->data << " ";
}
//判断树是否存在
bool BiTreeEmpty(BiTree& T)
{if (!T)return false;elsereturn true;
}
void test()
{BiTree T = new BiTreeNode;InitBiTree(T);cout << "请输入先序遍历顺序下各个结点的值,空结点用#代替:" << endl;CreatBitree(T);//DestroyBiTree(T);if (BiTreeEmpty(T)){cout << "层序遍历顺序:" << endl;LevelorderBitree(T);cout << endl << "先序遍历顺序:" << endl;PreorderBitree(T);cout << endl << "中序遍历顺序:" << endl;MediumorderBitree(T);cout << endl << "后序遍历顺序:" << endl;PostorderBitree(T);cout << endl << "二叉树的深度为" << BiTreeDepth(T) << endl;}else{cout << "该树不存在" << endl;}//测试样例:ABDH#K###E##CFI###G#J##
}
int main()
{test();return 0;
}
C/C++实现二叉树的遍历(深度优先,广度优先)相关推荐
- 二叉树遍历(深度优先+广度优先)
文章目录 1.深度优先遍历 1.1 先序遍历 1.2 中序遍历 1.3 后序遍历 2. 广度优先遍历 3.验证结果 参考文献 二叉树的遍历分为两类,一类是深度优先遍历,一类是广度优先遍历. 1.深度优 ...
- 二叉树层序遍历(广度优先搜索)基础概念与经典题目(Leetcode题解-Python语言)
二叉树的广度优先搜索即从上到下.从左到右地进行搜索,对于层序遍历(Level Order)问题,即依次遍历第一层节点.第二层节点-等,基本可以秒杀. 广度优先搜索是通过队列来实现的,python中优先 ...
- day11二叉树的遍历(递归遍历和迭代遍历)
二叉树的迭代遍历有点难理解,需要手动多模拟模拟 1.二叉树的种类 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树. 完全二叉树的定义如下:在 ...
- 二叉树深度优先遍历和广度优先遍历
二叉树深度优先遍历和广度优先遍历
- python、java实现二叉树,细说二叉树添加节点、深度优先(先序、中序、后续)遍历 、广度优先 遍历算法...
数据结构可以说是编程的内功心法,掌握好数据结构真的非常重要.目前基本上流行的数据结构都是c和c++版本的,我最近在学习python,尝试着用python实现了二叉树的基本操作.写下一篇博文,总结一下, ...
- 二叉树的深度优先遍历和广度优先遍历
二叉树是一种很重要的数据结构,对于二叉树的遍历,有深度优先遍历和广度优先遍历,深度优先遍历又有先序.中序.后续遍历,广度优先遍历就是按层遍历. 1. 深度优先遍历 深度优先遍历,也就是先序.中序.后续 ...
- 二叉树的遍历—广度优先(BFS)和深度优先(DFS)python实现
二叉树 二叉树(Binary tree)是树形结构的一个重要类型.对于二叉树的基础知识这里不做过多介绍,下面我们直接介绍二叉树的遍历方式和如何用python代码去实现二叉树的遍历. 二叉树的遍历(重点 ...
- 二叉树广度遍历 c语言,二叉树深度优先遍历和广度优先遍历
对于一颗二叉树,深度优先搜索(Depth First Search)是沿着树的深度遍历树的节点,尽可能深的搜索树的分支.以上面二叉树为例,深度优先搜索的顺序 为:ABDECFG.怎么实现这个顺序呢 ? ...
- 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构与算法学习笔记:图...
图: 图结构区别于线性结构和树型结构,区别可见下图 逻辑上的图(graph)结构由顶点(vertex)和边(edge)组成. 一个图结构G包含顶点集合V和边集合E,任何两个顶点之间可以有一个边表示两者 ...
最新文章
- linux 两个虚拟机 socket本地,两台虚拟机Linux系统socket通信
- Nature:根系菌群参与磷胁迫和免疫的平衡
- Debug 和 Release 编译方式
- 区块链BaaS云服务(29) 溪塔科技 CITA-Cloud 二
- JAVA中System.out.println和System.out.print有什么区别
- 移动端Rem之讲解总结
- 哪些事是你当了大学老师之后才知道的?
- Spark 入门系列-简介以及生态
- java 后台跳出提示_小猿圈Java初学者练习小案例:猜数字游戏
- suse 10 下mysql安装
- Apache2.4项目配置PHP/TP项目方法
- C#空值和null判断
- Python数据结构与算法(1.2)——Python基础之变量与内置数据类型
- FPGA 闪烁LED
- EXCEL复制公式时,某些参数为固定单元格的计算公式
- 刘洪波《英文字根词源精讲》完整目录
- 推荐三款好用的终端开发平台
- 你还为给自己的IT团队起名字,写口号烦恼吗?(较为流行的团队名称)
- [论文阅读] LCC-NLM(局部颜色校正, 非线性mask)
- 软件开发公司的提成制度【修订中】