在处理二叉树的题目的时候,实现将二叉树的每个结点进行遍历才能进行处理,这样才能处理到这个结点,那么结点之间采取什么样的数据结构来存储也是非常关键的。
在处理图的时候更是这样,那么深度搜索和广度搜索显得非常重要了。

在广度搜索的时候,我们可以采取双队列的方式进行遍历

/*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. 二叉树遍历_递归和迭代(动图)

    二叉树遍历_递归和迭代 1. 定义二叉树 2. 二叉树递归遍历 3. 二叉树迭代遍历 3.1 前序遍历 3.2 中序遍历 3.3 后序遍历 3.4 层序遍历 1. 定义二叉树   首先定义一个简单的二 ...

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

    二叉树的遍历 (递归实现) 用C++实现二叉树的"先根遍历"存储. 用C++实现二叉树的"先根遍历"."中根遍历"."后根遍历&q ...

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

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

  4. 数据结构(六)二叉树的遍历(递归非递归方法)

    数据结构(六)二叉树的遍历(递归非递归方法) 一.递归方法 1.先序遍历 void PreOrder(BiTree T) {visit(T);PreOrder(T->LChild)PreOrde ...

  5. 二叉树的遍历(递归与非递归实现)

    二叉树的遍历(递归与非递归实现) 二叉树的实现(三叉链表的形式) public class XieChaoThreeLinkBinTree<E> {public static class ...

  6. 二叉树层序遍历递归与非递归_二叉树的遍历「递归、非递归」以及自己的感受

    --------又来了一次二叉树的遍历,每次都有不一样的理解!真不知道那些大佬是如何想出这些牛逼的算法的,佩服至极!!!!大家多写,多想,对这些的理解真的会发生变化!!! -------- ----- ...

  7. 算法(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后序遍 ...

  8. day11二叉树的遍历(递归遍历和迭代遍历)

    二叉树的迭代遍历有点难理解,需要手动多模拟模拟 1.二叉树的种类 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树. 完全二叉树的定义如下:在 ...

  9. 二叉树层序遍历分层[递归迭代两种思想+三种解法]

    层序遍历分层的递归迭代解法 前言 一.二叉树层序遍历分层 二.递归与迭代 总结 参考文献 前言 层序遍历作为二叉树遍历的基本遍历,一般来说只能用迭代来解.但是分层输出则既可用迭代,又可配合level用 ...

  10. Java二叉树前序遍历:递归+非递归实现,非递归详解

    二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树:左子树和右子树又同样都是二叉树. 如下便是一棵二叉树: 二叉树的前序遍历: 1. 遍历根节点 2. 如 ...

最新文章

  1. Oracle 10g OCP 042 题库 1-30 题 共168题
  2. 【MVC】Controller的使用
  3. 文档对象模型dom_什么是文档对象模型,以及为什么应该知道如何使用它。
  4. python自动化测试开发_基于python的selenium2自动化测试从基础到实战(Python3、selenium2、自动化测试、web测试)...
  5. 自动采集电脑壁纸PHP源码美化版
  6. java如何初始化对象_java中对象的初始化过程
  7. 人脸验证(一)--Deepface
  8. MySQL的备份与还原
  9. SMARTFORM打印程序模板
  10. SAP 配额协议及策略解析
  11. OC中内存管理(转)
  12. SQL Injection的猥琐技巧
  13. 跟铁拐李李老师学习工作流的第二天
  14. 剑指 Offer 46. 把数字翻译成字符串 【 c++/java详细题解 】
  15. python开三次方_python 3次方
  16. Universal Robot——在Gazebo中模拟UR5机器人
  17. NLP十大Baseline论文简述(一) - Word2vec
  18. ffmpeg_Cropping video(剪裁视频)命令行
  19. 机器学习模型常用性能指标和Python代码实现
  20. 金立集团董事长-刘立荣-注意细节

热门文章

  1. L1-038 新世界 (5 分)—团体程序设计天梯赛
  2. 高并发秒杀系统--秒杀高并发分析与解决方案
  3. iOS:Reachability网络监听
  4. 创建DbContext
  5. Ruby Numeric
  6. .NET / C# basic
  7. 像A + B一样容易
  8. VXLAN详解(三)
  9. 路由器AP、路由、桥接模式有什么区别
  10. 深度数据对接 链接服务器 数据传输