二叉树的遍历

广度优先遍历

·层次遍历

深度优先遍历

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 先序遍历 1.2 中序遍历 1.3 后序遍历 2. 广度优先遍历 3.验证结果 参考文献 二叉树的遍历分为两类,一类是深度优先遍历,一类是广度优先遍历. 1.深度优 ...

  2. 二叉树层序遍历(广度优先搜索)基础概念与经典题目(Leetcode题解-Python语言)

    二叉树的广度优先搜索即从上到下.从左到右地进行搜索,对于层序遍历(Level Order)问题,即依次遍历第一层节点.第二层节点-等,基本可以秒杀. 广度优先搜索是通过队列来实现的,python中优先 ...

  3. day11二叉树的遍历(递归遍历和迭代遍历)

    二叉树的迭代遍历有点难理解,需要手动多模拟模拟 1.二叉树的种类 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树. 完全二叉树的定义如下:在 ...

  4. 二叉树深度优先遍历和广度优先遍历

    二叉树深度优先遍历和广度优先遍历

  5. python、java实现二叉树,细说二叉树添加节点、深度优先(先序、中序、后续)遍历 、广度优先 遍历算法...

    数据结构可以说是编程的内功心法,掌握好数据结构真的非常重要.目前基本上流行的数据结构都是c和c++版本的,我最近在学习python,尝试着用python实现了二叉树的基本操作.写下一篇博文,总结一下, ...

  6. 二叉树的深度优先遍历和广度优先遍历

    二叉树是一种很重要的数据结构,对于二叉树的遍历,有深度优先遍历和广度优先遍历,深度优先遍历又有先序.中序.后续遍历,广度优先遍历就是按层遍历. 1. 深度优先遍历 深度优先遍历,也就是先序.中序.后续 ...

  7. 二叉树的遍历—广度优先(BFS)和深度优先(DFS)python实现

    二叉树 二叉树(Binary tree)是树形结构的一个重要类型.对于二叉树的基础知识这里不做过多介绍,下面我们直接介绍二叉树的遍历方式和如何用python代码去实现二叉树的遍历. 二叉树的遍历(重点 ...

  8. 二叉树广度遍历 c语言,二叉树深度优先遍历和广度优先遍历

    对于一颗二叉树,深度优先搜索(Depth First Search)是沿着树的深度遍历树的节点,尽可能深的搜索树的分支.以上面二叉树为例,深度优先搜索的顺序 为:ABDECFG.怎么实现这个顺序呢 ? ...

  9. 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构与算法学习笔记:图...

    图: 图结构区别于线性结构和树型结构,区别可见下图 逻辑上的图(graph)结构由顶点(vertex)和边(edge)组成. 一个图结构G包含顶点集合V和边集合E,任何两个顶点之间可以有一个边表示两者 ...

最新文章

  1. linux 两个虚拟机 socket本地,两台虚拟机Linux系统socket通信
  2. Nature:根系菌群参与磷胁迫和免疫的平衡
  3. Debug 和 Release 编译方式
  4. 区块链BaaS云服务(29) 溪塔科技 CITA-Cloud 二
  5. JAVA中System.out.println和System.out.print有什么区别
  6. 移动端Rem之讲解总结
  7. 哪些事是你当了大学老师之后才知道的?
  8. Spark 入门系列-简介以及生态
  9. java 后台跳出提示_小猿圈Java初学者练习小案例:猜数字游戏
  10. suse 10 下mysql安装
  11. Apache2.4项目配置PHP/TP项目方法
  12. C#空值和null判断
  13. Python数据结构与算法(1.2)——Python基础之变量与内置数据类型
  14. FPGA 闪烁LED
  15. EXCEL复制公式时,某些参数为固定单元格的计算公式
  16. 刘洪波《英文字根词源精讲》完整目录
  17. 推荐三款好用的终端开发平台
  18. 你还为给自己的IT团队起名字,写口号烦恼吗?(较为流行的团队名称)
  19. [论文阅读] LCC-NLM(局部颜色校正, 非线性mask)
  20. 软件开发公司的提成制度【修订中】

热门文章

  1. iphone开发小技巧汇总
  2. 树莓派控制ZD-8731两相步进电机驱动器
  3. 二氧化钛接枝聚(苯乙烯-二乙烯苯)/马来酸酐多孔纳米复合微球
  4. 自旋锁和互斥锁的区别
  5. 战地1如何修改服务器地址,战地1修改服务器地址
  6. iOS 关闭键盘 [self endEditing: YES]
  7. 李开复:AlphaGo若打败了世界冠军就意味着计算机超越人脑?
  8. 如何提升美团渠道的快消商品销售-从搜索行为和转化率分析|倪钰桐谈电商
  9. java左斜杠如何转义_java 反斜杠转义
  10. Python_sobel边缘检测