一、图和运行结果如下

二、代码如下:

#include<iostream>
#include<string>
#include<fstream>
#include<queue>
#include<stack>
#include<string.h>
using namespace std;
static int level_count[10];
class BTree
{
public:int val;BTree *left, *right;
};class Tree
{
public:BTree *root;Tree() {root = create_node(1, "root");}BTree *create_node(int level, string pos);void PreOrder(BTree *t);void InOrder(BTree *t);void PostOrder(BTree *t);void BFS(BTree *t);void DFS(BTree *t);
};BTree *Tree::create_node(int level, string pos)
{int data;BTree *node =new BTree;cout << "please enter data:level " << level << " " << pos <<" 第"<< ++level_count[level-1]<<"个节点"<< endl;cin >> data;if (data == 0){return NULL;}node->val = data;node->left = create_node(level + 1, "left");node->right = create_node(level + 1, "right");return node;
}void Tree::PreOrder(BTree *t)
{if (t){cout << t->val << " ";PreOrder(t->left);PreOrder(t->right);}
}void Tree::InOrder(BTree *t)
{if (t){InOrder(t->left);cout << t->val << " ";InOrder(t->right);}
}void Tree::PostOrder(BTree *t)
{if (t){PostOrder(t->left);PostOrder(t->right);cout << t->val << " ";}
}/*广度优先搜索算法*/
void Tree::BFS(BTree *t)
{queue<BTree*> qu;qu.push(t);BTree *node;while (!qu.empty()){node = qu.front();cout << node->val << " ";qu.pop();if (node->left)qu.push(node->left);if (node->right)qu.push(node->right);}
}
/*深度优先搜索算法*/
void Tree::DFS(BTree *t)
{stack<BTree *>st;st.push(t);BTree *node;while (!st.empty()){node = st.top();cout << node->val << " ";st.pop();if (node->right){st.push(node->right);}if (node->left){st.push(node->left);}}
}int main()
{Tree tree;cout << "前序:" << endl;tree.PreOrder(tree.root);cout << "\n中序:" << endl;tree.InOrder(tree.root);cout << "\n后序:" << endl;tree.PostOrder(tree.root);cout << "\n广度搜索:" << endl;tree.BFS(tree.root);cout << "\n深度搜索:" << endl;tree.DFS(tree.root);return 0;
}

三、运行方式:

每一步会提示输入第几层第几个节点,如果节点不存在,输入为0;

如下图:

二叉树的前序中序后序递归查找,深度,广度搜索C++实现(VS2017)相关推荐

  1. java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...

    224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...

  2. C++实现二叉树 前、中、后序遍历(递归与非递归)非递归实现过程最简洁版本

    本文并非我所写,是复制的该链接中的内容: 最近学习二叉树,想编程实现递归和非递归的实现方式: 递归的方式就不说了,因为大家的递归程序都一样:但是对于非递归的实现方式, 根据这几天的查阅资料已看到差不多 ...

  3. 二叉树先、中、后遍历递归+非递归

    文章目录 前言 思路 设计思想 非递归前序遍历的思路 非递归中序遍历的思路 非递归后序遍历的思路 层序遍历的思路 完整代码 MyBinaryTree.h MyBinaryTree.cpp Main.c ...

  4. 【LeetCode | 二叉树前、中、后序遍历{递归法}实现】

    1.前序遍历 #include <iostream> #include <vector> #include <queue> #include <algorit ...

  5. 【LeetCode | 二叉树前、中、后序遍历{迭代法}实现】

    1.前序遍历 // 解题思路:利用栈的原理实现以迭代方法来前序遍历(根左右)二叉树 class Solution { public:vector<int> preorderTraversa ...

  6. java数据结构学习笔记-二叉树前、中、后序遍历

    public class BinaryTreeDemo {public static void main(String args[]){Employee emp1= new Employee(1,&q ...

  7. 二叉树前、中、后序线索化及遍历

    public class ThreadedBinaryTree {public static void main(String[] args){Heronodes node1=new Heronode ...

  8. 二叉树根据前序遍历和后序遍历,求解中序遍历

    既然是树,还是用根来描述更为贴切,先把根遍历出来,再遍历左右子树,就是先根遍历:后根遍历就是先把左右子树遍历出来,再把根遍历出来:只要牢记一点,不论怎么遍历,规则同样要作用于子树. 比如上图,先根遍历 ...

  9. 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++

    a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...

  10. 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法

    本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...

最新文章

  1. FlashInspector 【Firefox浏览器插件,flash分析工具】
  2. boost::log::filter用法的测试程序
  3. 用心推荐三个嵌入式方向精品号
  4. 希望我不会“伤心至死”
  5. redis nosql_NoSql数据库:Cassandra,Mongo,Redis数据库比较
  6. Qt4_Laying Out Widgets Widgets
  7. Python:anaconda3/bin/activate: Permission denied
  8. dapper利用DynamicParameters构建动态参数查询
  9. 企业开发基础设施--序
  10. Java逐帧动画播放器V0.1.0
  11. 学习之学习--混沌大学商学院--第一课--HHR计划
  12. 堆栈的区别linux C,uClinux堆栈
  13. 3D建模和3D渲染吃什么硬件?专业图形显卡和游戏显卡区别
  14. 计算机十六进制是什么意思,2进制和16进制是什么意思?它们之间如何换算?
  15. C# StreamReader 读取ANSI编码文本文件乱码
  16. 数模转换器ADC0832使用原理及控制程序
  17. win10查看显卡的运算能力
  18. 关于JDK8安装遇到1335问题
  19. 欢迎回家,希尔顿集团全力迎接凯旋归来最美逆行者
  20. xp开机加载个人设置很慢的解决方法

热门文章

  1. 快速幂 (转载,详细)
  2. SilverlightMVVM模式中的数据校验
  3. [《孔雀》观后]聪明的孩子提着易碎的灯笼
  4. Android 用adb 打印linux内核调试信息dmesg和kmsg命令
  5. 使用LogKit进行日志操作
  6. es6 依赖循环_探索 JavaScript 中的依赖管理及循环依赖
  7. 微信小程序(6)模板详解 template
  8. ASP.NET Core 2 学习笔记(三)中间件
  9. TCP/IP 某些最常见的错误原因码 (errno)列表
  10. jQuery之事件绑定