前序遍历

方法一:

void PreOrderWithoutRecursion1(BTNode* root)
{if (root == NULL)return;BTNode* p = root;stack<btnode*> s;while (!s.empty() || p){//边遍历边打印,并存入栈中,以后需要借助这些根节点(不要怀疑这种说法哦)进入右子树while (p){cout << setw(4) << p->data;s.push(p);p = p->lchild;}//当p为空时,说明根和左子树都遍历完了,该进入右子树了if (!s.empty()){p = s.top();s.pop();p = p->rchild;}}cout << endl;
}</btnode*>

方法二:

void PreOrderWithoutRecursion2(BTNode* root)
{if (root == NULL)return;BTNode* p = root;stack<btnode*> s;while (!s.empty() || p){if (p){cout << setw(4) << p->data;s.push(p);p = p->lchild;}else{p = s.top();s.pop();p = p->rchild;}}cout << endl;
}</btnode*>

方法三:

public void preOrderWithoutRecursion(TreeNode T){ //前序遍历非递归算法  TreeNode p;  Stack<TreeNode> stack = new Stack<TreeNode>();  stack.push(T);             //先将根节点压进栈中  while(T!=null&&!stack.empty()){  p = stack.pop();        //弹出栈顶的节点赋给p  System.out.println(p.data);  //用输出来代替对节点的处理  if(p.rchild!=null){             stack.push(p.rchild);      //如果弹出节点的右孩子不为空则压入栈  }                           //注意,这里的重点是一定要先将右孩子压入栈,再将左孩子压入  if(p.lchild!=null){  stack.push(p.lchild);     //如果弹出节点的左孩子不为空则压入栈  }         }     }

前序遍历的非递归算法相关推荐

  1. 二叉树遍历的非递归算法

    大一下半期数据结构 知识点 递归算法虽然简单,但一般而言,其执行效率并不高.对于二叉树的遍历操作,可以仿照递归算法执行过程中工作栈的状态变化得到非递归算法. 一.前序遍历非递归算法 二叉树前序遍历非递 ...

  2. 数据结构-----后序遍历二叉树非递归算法(利用堆栈实现)

    一.非递归后序遍历算法思想 后序遍历的非递归算法中节点的进栈次数是两个,即每个节点都要进栈两次,第二次退栈的时候才访问节点. 第一次进栈时,在遍历左子树的过程中将"根"节点进栈,待 ...

  3. [转载]二叉树先序、中序、后序三种遍历的非递归算法

    本贴给出二叉树先序.中序.后序三种遍历的非递归算法,此三个算法可视为标准算法. 1.先序遍历非递归算法 #define maxsize 100 typedef struct { Bitree Elem ...

  4. 二叉树中序遍历的非递归算法

    根据二叉树的先序遍历结果创建一棵二叉树,即先创建根结点,然后再创建左子树,最后创建右子树,对于左右子树的创建也遵循根左右的原则,所以对于左右子树的创建可以递归调用本函数,此问题是典型的需要用递归算法求 ...

  5. 数据结构 | 二叉树 先根、中根、后根遍历的非递归算法

    上期文章: 数据结构 | 树与二叉树 参考教材:<数据结构>,刘大有 编程语言: C++ 目录 (一)二叉树的存储结构 (二)二叉树的遍历 先根遍历非递归算法 中根遍历非递归算法 后根遍历 ...

  6. 二叉树后序遍历的非递归算法

    二叉树的后序遍历的非递归算法与二叉树的先序和中序遍历的非递归算法相比稍微复杂一点. 大致思路是:如果当前结点左右子树均为空,则可以访问当前结点,或者左右子树不均为空,但是前一个访问的结点是当前结点的左 ...

  7. 后序遍历的非递归算法python_二叉树后序遍历(递归与非递归)算法C语言实现...

    二叉树后序遍历的实现思想是:从根节点出发,依次遍历各节点的左右子树,直到当前节点左右子树遍历完成后,才访问该节点元素. 图 1 二叉树 如图 1 中,对此二叉树进行后序遍历的操作过程为: 从根节点 1 ...

  8. 【二叉树】根据后续和中序遍历输出前序遍历 [建树+非建树做法]

    F . 案例 4-1.1:根据后续和中序遍历输出前序遍历 Description 本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果. Input 第一行给出正整数N (≤3 ...

  9. 二叉树利用堆栈实现遍历的非递归算法

    二叉树的遍历有三种不同的遍历方法,分别是前序遍历.中序遍历以及后序遍历 遍历的实现我们在上一篇博客中已经用递归的方法实现了,那么可不可以不用递归实现呢,答案是可以的 在这一篇博客中我们会利用堆栈将遍历 ...

最新文章

  1. “网红” WebAssembly 与 K8s 如何实现双剑合璧?
  2. C++初始化和关闭roscpp节点
  3. CAN 屏蔽器与滤波器(过滤器)
  4. 数据库:SQLServer Stuff 函数用法笔记
  5. C++学习——static
  6. MySQL查询语句转postGRE语句_PostgreSQL DBA常用SQL查询语句
  7. 国二c语言考试分值,计算机二级C语言题型和评分标准
  8. mysql canvert mongo_如何在MongoDB中的$match中使用聚合运算符(例如$year或$dayOfMonth)?...
  9. Pc端微信加群的测试用例
  10. [每日一题] OCP1z0-047 :2013-07-27 外部表――不能被DML和建索引...................................16...
  11. Centos7.9源码编译安装Apache
  12. ZigBee学习之——ZStack API解读
  13. Java后端编程技术微信群和QQ群
  14. JavaWeb项目打包上线简单流程
  15. modbus模拟器使用
  16. 异常检测中的浅层模型与深度学习模型综述(A Unifying Review of Deep and Shallow Anomaly Detection)
  17. 纵向手风琴html,CSS3制作垂直手风琴
  18. 运用PS扭曲滤镜 将书法贴在人体上
  19. CheckBox选中状态改变
  20. 计算机英语中poke什么意思,poke one是什么意思

热门文章

  1. hdu1878欧拉回路(DFS+欧拉回路)
  2. 5800计算机交点法程序大全,FX5800计算器交点法正反算程序加入高程及隧道超欠挖...
  3. Arduino ESP8266固件bin升级四种方法
  4. 迎接2016,一个程序员的总结
  5. Nginx+Lua 实现灰度发布详细步骤
  6. 2021一线互联网校招面试真题解析,看完这一篇你就懂了
  7. 战地2服务器2地图修改,【战地2怎么将地图改为32人】如何修改地图_战地2修改地图教程_游戏城...
  8. matlab文件名批量读取dat文件,matlab批量读取dat
  9. 如何求出两个整数的最大公约数
  10. 谣言检测文献阅读二—Earlier detection of rumors in online social networks using certainty‑factor‑based convolu