二叉树前中后、层次遍历
#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
二叉树前中后、层次遍历相关推荐
- 二叉树前中后序遍历以及节点计算
二叉树前中后序遍历以及节点计算 二叉树 分类 二叉链的数据结构 三叉链的数据结构 四种遍历方法 深度优先遍历:前中后序 广度优先遍历:层序遍历 计算 节点个数 叶子节点个数 树的高度 第k层的节点个数 ...
- 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解
前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...
- 二叉树前中后序遍历+刷题【中】【数据结构/初阶/C语言实现】
文章目录 1. 二叉树基础操作 1.1 二叉树遍历 1.1.1 前序遍历 前序遍历(Pre-Order Traversal) 1.1.2 中序遍历 中序遍历(In-Order Traversal) 1 ...
- 二叉树前中后层遍历(递归/非递归)(简单易懂(*^ー^))
文章目录 二叉树的遍历 1 先序遍历 1.1 递归 1.2 非递归 2 中序遍历 2.1 递归 2.2 非递归 3 后序遍历 3.1 递归 3.2 非递归 4 层序遍历 5 前中后层序完整可运行代码( ...
- 【霍罗维兹数据结构】二叉树前中后序遍历 | 层序遍历 | 复制二叉树 | 判断两个二叉树全等 | 可满足性问题
写在前面 学习二叉树结构,最简单的方式就是遍历.所谓二叉树遍历,就是按照某种特定的规则,一次对二叉树中的节点进行相应的操作,并且每个节点只操作一次. 访问节点所做的操作要看具体的应用问题.遍历是二叉树 ...
- LeetCode——树:层次遍历、前中后序遍历
LeetCode--树:层次遍历.前中后序遍历 目录 层次遍历 二叉树的层平均值 找树左下角的值 前中后序遍历 概述 非递归实现二叉树的前序遍历 非递归实现二叉树的中序遍历 非递归实现二叉树的后序遍历 ...
- 数据结构-二叉树(包含二叉树的层次建树、前中后序遍历、层次遍历解析及代码)
目录 一.树与二叉树的原理解析 1.树的定义 2.树的结构和特点 3.二叉树的定义 4.树结点的数据结构 二.二叉树的层次建树 1.二叉树层次建树的原理及分析 2.完整代码 三.二叉树的前中后序遍历 ...
- 代码随想录——二叉树(一):前中后序遍历,层序遍历,翻转
题目来自: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. ...
- 二叉树N叉数的前中后序遍历总结,python实现递归法和迭代法
关于二叉树的前序遍历(preoder).中序遍历(inorder)和后序遍历(postorder),实际上只需要记住:左子节点一定在右子节点的左边(左右),所谓前中后序遍历就是根节点的位置不同,前序是 ...
- [Leedcode][JAVA][第94/144/145题][前中后序遍历][递归][迭代][二叉树]
[问题描述][] 前序遍历 先输出当前结点的数据,再依次遍历输出左结点和右结点 中序遍历 先遍历输出左结点,再输出当前结点的数据,再遍历输出右结点 后续遍历 先遍历输出左结点,再遍历输出右结点,最后输 ...
最新文章
- 算法人必懂的进阶SQL知识,4道面试常考题
- 原子核与外围电子有非常大的空间为什么物体有光滑的平面
- 信息大脑如何从物理大脑中涌现?
- 一个普通摄像头就让二次元老婆“活”了过来,网友:求收费
- vs 2005 下载,再汉化---没想到是痛苦的过程
- CSS3菜单栏透明兼容问题
- product category no need to optimize
- el表达式与jstl的用法
- 数组实例的find() 和 findIndex()方法
- DB2单表排序查询报错分析及解决办法
- 8、不与最大值相同的数字之和
- oracle客户端 centos,Centos7-安装oracle客户端11.2.0.4
- 求素数--筛选法和打表
- 一个按照行来截取显示文章摘要的函数
- 大数据hadoop,spark,flink等经典电子书PDF下载
- ArcGIS自动矢量化~
- 231个web前端的javascript特效分享
- 国内主流Arduino图形化编程软件专业评测
- mysql虚拟列表_动态网页制作-官方版合集下载-多特
- 74HC595级联电路编程篇(三)