#include<iostream>
#include<stack>
#include<queue>
using namespace std;/*
二叉树遍历算法递归+非递归:
前序遍历:根->左->右
中序遍历:左->根->右
后序遍历:左->右->根
层次遍历
*/
struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x): val(x),left(NULL),right(NULL) {}
};/*递归版本*/
void prerecusive(TreeNode *root)
{if (!root) return;cout << root->val << " ";prerecusive(root->left);prerecusive(root->right);
}
void inrecusive(TreeNode *root)
{if (!root) return;inrecusive(root->left);cout << root->val << " ";inrecusive(root->right);
}
void postrecusive(TreeNode *root)
{if (!root) return;postrecusive(root->left);postrecusive(root->right);cout << root->val << " ";
}/*循环版本。栈做辅助*/
void preiteration(TreeNode *root)
{if (!root) return;stack<TreeNode *> s;s.push(root);while (!s.empty()){     TreeNode *curr=s.top();cout << curr->val << " ";s.pop();if (curr->right) s.push(curr->right);if (curr->left) s.push(curr->left);}
}
void initeration(TreeNode *root)
{if (!root) return;stack<TreeNode *> s;TreeNode *curr = root;while (curr || !s.empty())//s没有值,第一个判断条件是curr不是空
    {if (curr){s.push(curr);curr = curr->left;}else{cout << s.top()->val << " ";curr = s.top()->right;s.pop();}}
}
void postiteration(TreeNode *root)
{if (!root) return;stack<TreeNode *> s;s.push(root);TreeNode *curr;TreeNode *visited;//记录子节点已经访问过while (!s.empty()){curr = s.top();/** 出栈条件:* 对于叶子节点:直接弹出* 对于非叶子节点:如果已经遍历过其左子节点或右子节点,则弹出*/if ((!curr->left && !curr->right) || (visited && (curr->left==visited || curr->right == visited))){cout << curr->val << " ";visited = curr;s.pop();}else{if (curr->right) s.push(curr->right);if (curr->left) s.push(curr->left);}}
}void leveltraverse(TreeNode *root)
{if (!root) return;queue<TreeNode *> q;TreeNode *curr;q.push(root);while (!q.empty()){curr = q.front();cout << curr->val << " ";q.pop();if (curr->left) q.push(curr->left);if (curr->right) q.push(curr->right);}
}

转载于:https://www.cnblogs.com/beixiaobei/p/10914253.html

二叉树前中后、层次遍历相关推荐

  1. 二叉树前中后序遍历以及节点计算

    二叉树前中后序遍历以及节点计算 二叉树 分类 二叉链的数据结构 三叉链的数据结构 四种遍历方法 深度优先遍历:前中后序 广度优先遍历:层序遍历 计算 节点个数 叶子节点个数 树的高度 第k层的节点个数 ...

  2. 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解

    前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...

  3. 二叉树前中后序遍历+刷题【中】【数据结构/初阶/C语言实现】

    文章目录 1. 二叉树基础操作 1.1 二叉树遍历 1.1.1 前序遍历 前序遍历(Pre-Order Traversal) 1.1.2 中序遍历 中序遍历(In-Order Traversal) 1 ...

  4. 二叉树前中后层遍历(递归/非递归)(简单易懂(*^ー^))

    文章目录 二叉树的遍历 1 先序遍历 1.1 递归 1.2 非递归 2 中序遍历 2.1 递归 2.2 非递归 3 后序遍历 3.1 递归 3.2 非递归 4 层序遍历 5 前中后层序完整可运行代码( ...

  5. 【霍罗维兹数据结构】二叉树前中后序遍历 | 层序遍历 | 复制二叉树 | 判断两个二叉树全等 | 可满足性问题

    写在前面 学习二叉树结构,最简单的方式就是遍历.所谓二叉树遍历,就是按照某种特定的规则,一次对二叉树中的节点进行相应的操作,并且每个节点只操作一次. 访问节点所做的操作要看具体的应用问题.遍历是二叉树 ...

  6. LeetCode——树:层次遍历、前中后序遍历

    LeetCode--树:层次遍历.前中后序遍历 目录 层次遍历 二叉树的层平均值 找树左下角的值 前中后序遍历 概述 非递归实现二叉树的前序遍历 非递归实现二叉树的中序遍历 非递归实现二叉树的后序遍历 ...

  7. 数据结构-二叉树(包含二叉树的层次建树、前中后序遍历、层次遍历解析及代码)

    目录 一.树与二叉树的原理解析 1.树的定义 2.树的结构和特点 3.二叉树的定义 4.树结点的数据结构 二.二叉树的层次建树 1.二叉树层次建树的原理及分析 2.完整代码 三.二叉树的前中后序遍历 ...

  8. 代码随想录——二叉树(一):前中后序遍历,层序遍历,翻转

    题目来自:https://www.programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80. ...

  9. 二叉树N叉数的前中后序遍历总结,python实现递归法和迭代法

    关于二叉树的前序遍历(preoder).中序遍历(inorder)和后序遍历(postorder),实际上只需要记住:左子节点一定在右子节点的左边(左右),所谓前中后序遍历就是根节点的位置不同,前序是 ...

  10. [Leedcode][JAVA][第94/144/145题][前中后序遍历][递归][迭代][二叉树]

    [问题描述][] 前序遍历 先输出当前结点的数据,再依次遍历输出左结点和右结点 中序遍历 先遍历输出左结点,再输出当前结点的数据,再遍历输出右结点 后续遍历 先遍历输出左结点,再遍历输出右结点,最后输 ...

最新文章

  1. 算法人必懂的进阶SQL知识,4道面试常考题
  2. 原子核与外围电子有非常大的空间为什么物体有光滑的平面
  3. 信息大脑如何从物理大脑中涌现?
  4. 一个普通摄像头就让二次元老婆“活”了过来,网友:求收费
  5. vs 2005 下载,再汉化---没想到是痛苦的过程
  6. CSS3菜单栏透明兼容问题
  7. product category no need to optimize
  8. el表达式与jstl的用法
  9. 数组实例的find() 和 findIndex()方法
  10. DB2单表排序查询报错分析及解决办法
  11. 8、不与最大值相同的数字之和
  12. oracle客户端 centos,Centos7-安装oracle客户端11.2.0.4
  13. 求素数--筛选法和打表
  14. 一个按照行来截取显示文章摘要的函数
  15. 大数据hadoop,spark,flink等经典电子书PDF下载
  16. ArcGIS自动矢量化~
  17. 231个web前端的javascript特效分享
  18. 国内主流Arduino图形化编程软件专业评测
  19. mysql虚拟列表_动态网页制作-官方版合集下载-多特
  20. 74HC595级联电路编程篇(三)

热门文章

  1. 非标准化的阀门企业也在用钉钉宜搭实现数字化转型
  2. 德勤加入阿里云原生合作伙伴计划,强强联手开创数字化咨询新风向
  3. 编程基本原则——避免冗余代码
  4. 如何改造UE4用于赛璐璐3D卡渲?这里有一份日本大厂的实操分享
  5. 黑神话:悟空中演示视频中一些设计浅析与建议
  6. 腾讯NExT Studios万字解读:我们是怎样将一款偏硬核的Roguelike游戏大众化的?
  7. 如何让手游内存占用更小?从内存消耗iOS实时统计开始
  8. LOL手游超燃测试好评如潮,没拿到资格不用急,期待一手不删档
  9. LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
  10. UVa 10642 - Can You Solve It?