二叉树的前序中序后序递归查找,深度,广度搜索C++实现(VS2017)
一、图和运行结果如下
二、代码如下:
#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)相关推荐
- java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...
224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...
- C++实现二叉树 前、中、后序遍历(递归与非递归)非递归实现过程最简洁版本
本文并非我所写,是复制的该链接中的内容: 最近学习二叉树,想编程实现递归和非递归的实现方式: 递归的方式就不说了,因为大家的递归程序都一样:但是对于非递归的实现方式, 根据这几天的查阅资料已看到差不多 ...
- 二叉树先、中、后遍历递归+非递归
文章目录 前言 思路 设计思想 非递归前序遍历的思路 非递归中序遍历的思路 非递归后序遍历的思路 层序遍历的思路 完整代码 MyBinaryTree.h MyBinaryTree.cpp Main.c ...
- 【LeetCode | 二叉树前、中、后序遍历{递归法}实现】
1.前序遍历 #include <iostream> #include <vector> #include <queue> #include <algorit ...
- 【LeetCode | 二叉树前、中、后序遍历{迭代法}实现】
1.前序遍历 // 解题思路:利用栈的原理实现以迭代方法来前序遍历(根左右)二叉树 class Solution { public:vector<int> preorderTraversa ...
- java数据结构学习笔记-二叉树前、中、后序遍历
public class BinaryTreeDemo {public static void main(String args[]){Employee emp1= new Employee(1,&q ...
- 二叉树前、中、后序线索化及遍历
public class ThreadedBinaryTree {public static void main(String[] args){Heronodes node1=new Heronode ...
- 二叉树根据前序遍历和后序遍历,求解中序遍历
既然是树,还是用根来描述更为贴切,先把根遍历出来,再遍历左右子树,就是先根遍历:后根遍历就是先把左右子树遍历出来,再把根遍历出来:只要牢记一点,不论怎么遍历,规则同样要作用于子树. 比如上图,先根遍历 ...
- 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++
a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...
- 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法
本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...
最新文章
- FlashInspector 【Firefox浏览器插件,flash分析工具】
- boost::log::filter用法的测试程序
- 用心推荐三个嵌入式方向精品号
- 希望我不会“伤心至死”
- redis nosql_NoSql数据库:Cassandra,Mongo,Redis数据库比较
- Qt4_Laying Out Widgets Widgets
- Python:anaconda3/bin/activate: Permission denied
- dapper利用DynamicParameters构建动态参数查询
- 企业开发基础设施--序
- Java逐帧动画播放器V0.1.0
- 学习之学习--混沌大学商学院--第一课--HHR计划
- 堆栈的区别linux C,uClinux堆栈
- 3D建模和3D渲染吃什么硬件?专业图形显卡和游戏显卡区别
- 计算机十六进制是什么意思,2进制和16进制是什么意思?它们之间如何换算?
- C# StreamReader 读取ANSI编码文本文件乱码
- 数模转换器ADC0832使用原理及控制程序
- win10查看显卡的运算能力
- 关于JDK8安装遇到1335问题
- 欢迎回家,希尔顿集团全力迎接凯旋归来最美逆行者
- xp开机加载个人设置很慢的解决方法