二叉树遍历:

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include<stack>
#include<queue>
using namespace std;
struct BiTreeNode {char data;struct BiTreeNode *left_child;struct BiTreeNode *right_child;
};int N  = 0;void CreateBiTree(BiTreeNode* &T,char array[]){ //按先序输入二叉树中结点的值(一个字符),空格字符代表空树, //构造二叉树表表示二叉树T。 char ch = array[N];N = N + 1; if(ch =='*') T=NULL;//其中getchar()为逐个读入标准库函数 else{ T=new BiTreeNode;//产生新的子树 T->data=ch;//由getchar()逐个读入来 CreateBiTree(T->left_child,array);//递归创建左子树 CreateBiTree(T->right_child,array);//递归创建右子树
 }
}//CreateTree void create_T(BiTreeNode* &T, char array[]) {char ch = array[N];N=N+1;if (ch == '*') {T = NULL;} else {T = new BiTreeNode;T->data = ch;create_T(T->left_child, array);create_T(T->right_child, array);}
}// 递归 先序遍历
void pre_order_traverse(BiTreeNode* &T) {// 先序遍历if (T) {cout << T->data << " ";pre_order_traverse(T->left_child);pre_order_traverse(T->right_child);}
}//先序遍历 非递归;
void pre_order_traverse_no_recurse(BiTreeNode* &T) {// 非递归先序遍历二叉树stack<BiTreeNode*> s;BiTreeNode *p = T;// 当栈非空或者p指针非空时调用循环while (p != nullptr || !s.empty()) {while ( p != nullptr) {cout << p->data << " ";s.push(p);p = p->left_child;}if (!s.empty()) {p = s.top();s.pop();p = p->right_child;}}
}// 递归 中序遍历
void in_order_traverse(BiTreeNode* &T) {// 中序遍历if (T) {in_order_traverse(T->left_child);cout << T->data << " ";in_order_traverse(T->right_child);}
}// 中序遍历 非递归
void in_order_traverse_no_recurse(BiTreeNode* &T) {stack<BiTreeNode*> s;BiTreeNode *p = T;while (p != nullptr || !s.empty()) {while ( p != nullptr) {s.push(p);p = p->left_child;}if (!s.empty()) {p = s.top();cout << p->data << " ";s.pop();p = p->right_child;}}
}// 递归 后序遍历
void pos_order_traverse(BiTreeNode* &T) {// 中序遍历if (T) {pos_order_traverse(T->left_child);pos_order_traverse(T->right_child);cout << T->data << " ";}
}// 后序遍历 非递归
void pos_order_traverse_no_recurse(BiTreeNode* &T) {stack<BiTreeNode*> s;BiTreeNode *p = T;BiTreeNode*pp = NULL;while (p != nullptr || !s.empty()) {while ( p != nullptr) {s.push(p);p = p->left_child;}if (!s.empty()) {p = s.top();if(p->right_child==NULL || p->right_child == pp){cout<<p->data<<" ";s.pop();pp = p;p = NULL;}else{p=p->right_child;}}}
}void BFS(BiTreeNode* &T)
{queue<BiTreeNode*>s;BiTreeNode *p = T;s.push(T);while(!s.empty()){p = s.front();s.pop();cout<<p->data<<" ";if(p->left_child){s.push(p->left_child);}if(p->right_child){s.push(p->right_child);}}}int main(){
char array[]= "abce***d**mn*k**o*jh***";
BiTreeNode*T;
// create_T(T,array);

CreateBiTree(T,array);//pre_order
cout<<"pre_order_traverse"<<endl;
pre_order_traverse(T);
cout<<endl;
cout<<"pre_order_traverse_no_recurse"<<endl;
pre_order_traverse_no_recurse(T);
cout<<endl;//in_order
cout<<"in_order_traverse"<<endl;
in_order_traverse(T);
cout<<endl;
cout<<"in_order_traverse_no_recurse"<<endl;
in_order_traverse_no_recurse(T);
cout<<endl;//pos_order
cout<<"pos_order_traverse"<<endl;
pos_order_traverse(T);
cout<<endl;
cout<<"pos_order_traverse_no_recurse"<<endl;
pos_order_traverse_no_recurse(T);
cout<<endl;//层次遍历
BFS(T);return 0;
}

转载于:https://www.cnblogs.com/lovychen/p/11329117.html

二叉树,建树,前序,中序,后序,递归 非递归相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. 二叉树的前、中、后、层次非递归遍历(js)

    有如下二叉树  遍历: // 前序遍历, head-left-rightfunction HLR (tree) {const stack = [], res = []if (tree) stack.p ...

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

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

  9. 二叉树前序中序后序javascript_C++实现二叉树(建树,前序,中序,后序)递归和非递归实现...

    #include#include#include using namespacestd; typedefstructBTree {intval;struct BTree *left,*right; } ...

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

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

最新文章

  1. android 按键kl文件,Android添加新按键
  2. Python 处理CSV文件
  3. 刚体Collider包围测试
  4. TMS320F28335的SCI通信-FIFO中断通信实验
  5. having and group by
  6. DDG全家桶之3022
  7. 广州技术沙龙第 2、3 期参会者twitter、blog、兴趣大合集
  8. JavaScript从入门到放弃-JavaScript历史介绍
  9. 随想录(学校研究和公司研发)
  10. 拓端tecdat|R语言:用R语言填补缺失的数据
  11. Atitit jquery  1.4--v1.11  v1.12  v2.0  3.0 的新特性
  12. 《游戏设计、原型与开发——基于Unity与C#从构思到实现》学习笔记一
  13. 牛顿插值法的Python程序
  14. 基于51单片机的四通道交通灯设计
  15. 华为路由交换设备命令集合,建议收藏!
  16. 猜数字游戏,用户充值版(Java)
  17. 《魔兽世界插件》教程—21点扑克游戏 Blackjack
  18. 华为:证实已开发出自主操作系统
  19. 球球音响机器人怎么合成的_PS合成机器人教程
  20. sideeffects没配置css也还在,webpack4踩坑配置之sideEffects, 打包文件中没有css文件

热门文章

  1. Adobe Acrobat Pro设置高亮快捷键
  2. 本科主要数学科目的页数统计
  3. intellij默认maven仓库配置路径+默认New Project 工程路径
  4. ZooKeeper available but no active master location found
  5. synaptic不停抖动后自动关闭的问题
  6. ./configure: error: SSL modules require the OpenSSL library.
  7. mariadb设置root初始密码
  8. ubuntu: ssh: connect to host ubuntu port 22: No route to host
  9. is not allowed to connect to this MySql
  10. jquery中如何表达本页网址_jquery中怎么跳转页面?