二叉树的遍历_递归实现
在处理二叉树的题目的时候,实现将二叉树的每个结点进行遍历才能进行处理,这样才能处理到这个结点,那么结点之间采取什么样的数据结构来存储也是非常关键的。
在处理图的时候更是这样,那么深度搜索和广度搜索显得非常重要了。
在广度搜索的时候,我们可以采取双队列的方式进行遍历
/*1.二叉树的前序遍历 */
void preorder(TreeNode*root, vector<int>&result){if (!root) return;result.push_back(root->val);preorder(root->left, result);preorder(root->right, result);
}
vector<int> preorder(TreeNode*root){vector<int>result;preorder(root, result);return result;
}
/*2.中序遍历*/
void Inorder(TreeNode*root, vector<int>&result){if (!root) return;//传入根节点,处理子结点Inorder(root->left, result);result.push_back(root->val);Inorder(root->right, result);
}
vector<int>Inorder(TreeNode*root){vector<int>result;Inorder(root, result);return result;
}/*3.后序遍历*/
void Postorder(TreeNode*root, vector<int>result){if (!root)return;Postorder(root->left, result);Postorder(root->right, result);result.push_back(root->val);
}
vector<int>Postorder(TreeNode*root){vector<int>result;Postorder(root, result);return result;
}
/*4.层序遍历*/
vector<int> leveltraver(TreeNode*root){vector<int>result;if (root == nullptr)return result;queue<TreeNode*>q;q.push(root);while (!q.empty()){TreeNode*p = q.front();q.pop();result.push_back(p->val);if (p->left)q.push(p->left);if (p->right)q.push(p->right);}return result;
}
/*双队列模拟,图的层序遍历时,当前层和下一层,当前层只要不为空就每次弹出一个,然后判断弹出的这个的子结点是否为空,如果不为空,就将其压入下一层中。当前层弹出所有元素后交换当前层和下一层这样当前层就满了,又可以往外弹。交换后的下一层也变为空了,又可以装数据了。
*/
/*层序遍历,使用队列数据结构来实现此功能先把头结点放进队列,然后每次判断,进两个,每次出出一个。
*/
二叉树的遍历_递归实现相关推荐
- 二叉树遍历_递归和迭代(动图)
二叉树遍历_递归和迭代 1. 定义二叉树 2. 二叉树递归遍历 3. 二叉树迭代遍历 3.1 前序遍历 3.2 中序遍历 3.3 后序遍历 3.4 层序遍历 1. 定义二叉树 首先定义一个简单的二 ...
- 二叉树的遍历 (递归和非递归实现)
二叉树的遍历 (递归实现) 用C++实现二叉树的"先根遍历"存储. 用C++实现二叉树的"先根遍历"."中根遍历"."后根遍历&q ...
- 二叉树的遍历(递归,非递归,Morris)
二叉树的遍历 目录 递归遍历 非递归遍历 Morris遍历 1. 递归遍历 递归版遍历只要当前节点不为null,就可以三次回到当前节点. public static void preOrderRecu ...
- 数据结构(六)二叉树的遍历(递归非递归方法)
数据结构(六)二叉树的遍历(递归非递归方法) 一.递归方法 1.先序遍历 void PreOrder(BiTree T) {visit(T);PreOrder(T->LChild)PreOrde ...
- 二叉树的遍历(递归与非递归实现)
二叉树的遍历(递归与非递归实现) 二叉树的实现(三叉链表的形式) public class XieChaoThreeLinkBinTree<E> {public static class ...
- 二叉树层序遍历递归与非递归_二叉树的遍历「递归、非递归」以及自己的感受
--------又来了一次二叉树的遍历,每次都有不一样的理解!真不知道那些大佬是如何想出这些牛逼的算法的,佩服至极!!!!大家多写,多想,对这些的理解真的会发生变化!!! -------- ----- ...
- 算法(2)-二叉树的遍历(递归/迭代)python实现
二叉树的遍历 1.深度优先DFS 1.1 DFS 递归解法 1.1.1先序遍历 1.1.2中序遍历 1.1.3后序遍历 1.2 DFS迭代解法 1.2.1先序遍历 1.2.2中序遍历 1.2.3后序遍 ...
- day11二叉树的遍历(递归遍历和迭代遍历)
二叉树的迭代遍历有点难理解,需要手动多模拟模拟 1.二叉树的种类 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树. 完全二叉树的定义如下:在 ...
- 二叉树层序遍历分层[递归迭代两种思想+三种解法]
层序遍历分层的递归迭代解法 前言 一.二叉树层序遍历分层 二.递归与迭代 总结 参考文献 前言 层序遍历作为二叉树遍历的基本遍历,一般来说只能用迭代来解.但是分层输出则既可用迭代,又可配合level用 ...
- Java二叉树前序遍历:递归+非递归实现,非递归详解
二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树:左子树和右子树又同样都是二叉树. 如下便是一棵二叉树: 二叉树的前序遍历: 1. 遍历根节点 2. 如 ...
最新文章
- Oracle 10g OCP 042 题库 1-30 题 共168题
- 【MVC】Controller的使用
- 文档对象模型dom_什么是文档对象模型,以及为什么应该知道如何使用它。
- python自动化测试开发_基于python的selenium2自动化测试从基础到实战(Python3、selenium2、自动化测试、web测试)...
- 自动采集电脑壁纸PHP源码美化版
- java如何初始化对象_java中对象的初始化过程
- 人脸验证(一)--Deepface
- MySQL的备份与还原
- SMARTFORM打印程序模板
- SAP 配额协议及策略解析
- OC中内存管理(转)
- SQL Injection的猥琐技巧
- 跟铁拐李李老师学习工作流的第二天
- 剑指 Offer 46. 把数字翻译成字符串 【 c++/java详细题解 】
- python开三次方_python 3次方
- Universal Robot——在Gazebo中模拟UR5机器人
- NLP十大Baseline论文简述(一) - Word2vec
- ffmpeg_Cropping video(剪裁视频)命令行
- 机器学习模型常用性能指标和Python代码实现
- 金立集团董事长-刘立荣-注意细节