要求:给定一个二叉树序列,要求以递归与非递归的形式先序输出。

递归的本质就是系统自动用系统工作栈来将参数入栈与出栈,所以递归化非递归就是程序员自己来控制参数的入栈与出栈,可用循环加自定义栈来控制。
代码如下:
#include<iostream>
#include<stack>
using namespace std;
typedef struct BTNode
{char ch;struct BTNode *lchild;struct BTNode *rchild;}BTNode,*pBTNode;
void create_Bt(pBTNode &root)//用引用更加直观
{char ch=getchar();if(ch==' ')root=NULL;else{root=new BTNode;root->ch=ch;create_Bt(root->lchild);create_Bt(root->rchild);}
}
//递归先序遍历
void pre(pBTNode root)
{if(root!=NULL){cout<<root->ch<<' ';pre(root->lchild);pre(root->rchild);}
}
//非递归先序遍历
void pre_(pBTNode root)
{stack<pBTNode> s;while(root!=NULL||!s.empty())//递归化非递归关键用循环和自定义栈来控制递归的结束{if(root!=NULL){s.push(root);cout<<root->ch<<' ';root=root->lchild;}else{root=s.top();s.pop();root=root->rchild;}}
}
void main()
{pBTNode root;cout<<"请输入一个二叉树序列"<<endl;create_Bt(root);pre(root);cout<<endl;pre_(root);
}

程序运行结果如下:

转载于:https://www.cnblogs.com/hainange/p/6334082.html

二叉树的递归与非递归相关推荐

  1. 二叉树的几种递归和非递归式遍历:

    二叉树的几种递归和非递归式遍历: 1 #include <fstream> 2 #include <iostream> 3 4 using namespace std; 5 6 ...

  2. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历(java实现)

    分别用递归和非递归方式实现二叉树先序.中序和后序遍历 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点.我们约定:先序遍历顺序 为根.左.右;中序遍历顺序为左.根.右;后序遍历顺序为左 ...

  3. 树与二叉树的深度优先与广度优先算法(递归与非递归)

    本博客前面文章已对树与二叉树有过简单的介绍,本文主要是重点介绍有关二叉树的一些具体操作与应用 阅读本文前,可以先参考本博客 各种基本算法实现小结(三)-- 树与二叉树   和  各种基本算法实现小结( ...

  4. 转载:二叉树的前中后和层序遍历详细图解(递归和非递归写法)

    二叉树的前中后和层序遍历详细图解(递归和非递归写法) Monster_ii 2018-08-27 17:01:53 50530 收藏 403 分类专栏: 数据结构拾遗 文章标签: 二叉树 前序 中序 ...

  5. 九十五、二叉树的递归和非递归的遍历算法模板

    @Author:Runsen 刷Leetcode,需要知道一定的算法模板,本次先总结下二叉树的递归和非递归的遍历算法模板. 二叉树的四种遍历方式,前中后加上层序遍历.对于二叉树的前中后层序遍历,每种遍 ...

  6. 二叉树层序遍历递归与非递归_二叉树基础(1)-构建和遍历(递归和非递归)...

    二叉树的构建有2种方式:1.直接输入数字.2.根据两种顺序来判断另外一中顺序(后面会提到) 这里分享第一种构建方式,二叉树的前中后三种遍历方式(递归和非递归版本),和二叉树的层次遍历. 见代码demo ...

  7. 二叉树的遍历(递归,非递归,Morris)

    二叉树的遍历 目录 递归遍历 非递归遍历 Morris遍历 1. 递归遍历 递归版遍历只要当前节点不为null,就可以三次回到当前节点. public static void preOrderRecu ...

  8. 二叉树的遍历:先序 中序 后序遍历的递归与非递归实现及层序遍历

    二叉树的定义:一种基本的数据结构,是一种每个节点的儿子数目都不多于2的树 树节点的定义如下: // 树(节点)定义 struct TreeNode {int data; // 值TreeNode* l ...

  9. 左神算法:分别用递归和非递归方式实现二叉树先序、中序和后序遍历(Java版)

    本题来自左神<程序员代码面试指南>"分别用递归和非递归方式实现二叉树先序.中序和后序遍历"题目. 题目 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点 ...

  10. 二叉树(2)——遍历的非递归实现

    2019独角兽企业重金招聘Python工程师标准>>> 算法概述 递归算法简洁明了.可读性好,但与非递归算法相比要消耗更多的时间和存储空间.为提高效率,我们可采用一种非递归的二叉树遍 ...

最新文章

  1. 工作小记(三)----说说北京生活的乐趣
  2. kryo java_优化Java序列化– Java,XML,JSON,Kryo,POF
  3. feign获取outstream_Spring Cloud Feign接口返回流
  4. html input 字体颜色_html 元素参考整合实用收藏!前端web工程师必备!
  5. 记录一次游戏服务器的压测调优记录(Golang语言)
  6. java 线程 handler,java.lang.RuntimeException:处理程序(android.os.Handler)在死线程上向处理程序发送消息...
  7. Hbase体系架构与安装
  8. python做性能测试_Python做性能测试-1、Locust基础篇
  9. hibernate java.util.date 精度_hibernate中java.util.Date类型映射
  10. 联想网络同传系统用户手册(联想EDU应用用户手册)[联想硬盘保护,联想网络控制工具]
  11. java开发16g内存够吗_Java 内存模型 ,一篇就够了!
  12. java json转excel_JSON转EXCEL代码( java)
  13. dedecms如何制作中英文切换的网站?
  14. nginx+fastdfs 502异常解决
  15. 关于印发《计算机技术与软件专业技术资格(水平)考试暂行规定》
  16. directadmin支持多php,DirectAdmin升级PHP版本
  17. 也说说ADC以及ADC的主要技术参数及分类介绍
  18. 关于内存泄漏和内存溢出
  19. 作为学科的计算机科学(COMPUTING AS A DISCIPLINE)
  20. Log4j 爆发“核弹级”漏洞、工信部力推开源软件发展、“龙腾计划”启动|开源月报 Vol. 02...

热门文章

  1. 关于css3的背景切割(background-clip)、背景原点(background-origin)的使用
  2. 怎样读取html控件(如文本框)的值
  3. (转)GridView固定表头
  4. Silverlight 操作Excel 中的进程资源释放问题(续)
  5. pandas中dataframe的索引问题
  6. angular 个人零点学习
  7. Java从0开始之Java环境搭建
  8. bzoj3631: [JLOI2014]松鼠的新家(LCA+差分)
  9. C#实现不安装Oracle客户端访问远程服务器数据
  10. 外卖小哥到底是一群什么样的人?答案超乎你想象