文章制作不易,请点下你的小红心再走吧!
根据节点在其中的访问次序,我们二叉树的遍历方式有三种,分别是先序遍历,中序遍历,后序遍历。
先我们需要了解什么是二叉树的先序遍历,中序遍历,后序遍历
先序遍历:按照访问根节点——左子树——右子树的方式遍历这棵树
中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树
后序遍历:按照访问左子树——右子树——根节点的方式遍历这棵树

假设树节点如下:

struct TreeNode{int val;TreeNode *left;TreeNode *right;
};

递归版

先序遍历

void preorder(TreeNode* root) {if (!root) return;cout<<root->val;inorder(root->left);inorder(root->right);
}

中序遍历

void inorder(TreeNode* root) {if (!root) return;inorder(root->left);cout<<root->val;inorder(root->right);
}

后序遍历

void postorder(TreeNode* root) {if (!root) return;inorder(root->left);inorder(root->right);cout<<root->val;
}

非递归版(迭代)

先序遍历

void preOrder(TreeNode*root)
{stack<TreeNode*> stk;while(root!=NULL||!stk.empty()){while(root!=NULL){cout<<root->val<<" ";stk.push(root);root=root->left;}root=stk.top();stk.pop();root=root->right;}
}

中序遍历

void inorder(TreeNode* root) {stack<TreeNode*> stk;while (root != NULL|| !stk.empty()) {while (root != Null) {stk.push(root);root = root->left;}root = stk.top();stk.pop();cout<<root->val;root = root->right;}
}

后序遍历

void postorder(TreeNode *root) {stack<TreeNode *> stk;TreeNode *prev = NULL;while (root != NULL|| !stk.empty()) {while (root != NULL) {stk.emplace(root);root = root->left;}root = stk.top();stk.pop();if (root->right == NULL|| root->right == prev) {res.emplace_back(root->val);prev = root;root = NULL;} else {stk.emplace(root);root = root->right;}}

二叉树的遍历-C++相关推荐

  1. 二叉树的遍历(递归与非递归)

    class Node: # 定义树节点def __init__(self, value, left=None, right=None): # 节点的值及左子树.右子树self.value = valu ...

  2. 刷题:二叉树的遍历方式及根据遍历结果还原二叉树

    二叉树的遍历方式及根据遍历结果还原二叉树 1. 二叉树的遍历方式 2. 根据遍历结果还原二叉树 2.1 已知先序遍历和中序遍历还原二叉树 2.2 已知后序遍历和中序遍历还原二叉树 实验代码: 1. 二 ...

  3. 后序遍历的非递归算法python_刷题系列 - Python用非递归实现二叉树后续遍历

    顺便把Python用非递归实现二叉树后续遍历也写了. 其实前序中序和后续都是针对父节点说的.比如下面这个最简单二叉树. 前序就是ABC,父节点A在前 中序就是BAC,父节点A在中间 后序就是BCA,父 ...

  4. 二叉树 1.0 -- 创建二叉树、遍历二叉树、二叉树常见问题求解

    树的结构主要是为了查找,这个主要是为了搜索,树的结构关注的不是增删查改 树 广义上面的树的结构我们不知道树的一个节点是有几个子节点的,所以这个时候我们需要定义的一种结构就是,一个节点的孩子是可以动态的 ...

  5. PTA数据结构与算法题目集 6-9 二叉树的遍历

    PTA数据结构与算法题目集(中文) 6-9 二叉树的遍历 void InorderTraversal( BinTree BT ){if(BT==NULL)return;if(BT->Left){ ...

  6. 【swjtu】数据结构实验6_二叉树的遍历算法

    实验内容及要求: 编写程序,用先序递归遍历法建立二叉树的二叉链表存储结构,然后输出其先序.中序.后序以及层次遍历结点访问次序.其中层次遍历的实现需使用循环队列.二叉树结点数据类型建议选用字符类型. 实 ...

  7. 重拾算法(3)——用458329个测试用例全面测试二叉树和线索二叉树的遍历算法

    重拾算法(3)--用458329个测试用例全面测试二叉树和线索二叉树的遍历算法 在"上一篇"和"上上一篇"中,我给出了二叉树和线索二叉树的遍历算法.给出算法容易 ...

  8. 二叉树的遍历(包括递归和非递归方法)

    二叉树的遍历 遍历二叉树,就是按一定的某条搜索路径走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次.由于二叉树是非线性结构,每个结点都有可能有两棵子树,因此,树的遍历实质上是将二叉树的 ...

  9. java数据结构二叉树遍历_java数据结构 之 二叉树的遍历(1)

    树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合.它是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合 节点:上图的圆圈,比如A,B,C等都是表示 ...

  10. 二叉树深度优先遍历和广度优先遍历

    二叉树深度优先遍历和广度优先遍历

最新文章

  1. 《评人工智能如何走向新阶段》后记(再续7)
  2. django model 条件过滤 queryset.filter(**condtions) 用法
  3. android 结束if循环_Android Handler 消息循环机制
  4. Java并发编程之线程池及示例
  5. mysql8.0限制用户只能访问指定数据库,限制用户只有某种权限
  6. 归属地的判断规则有吗_IPO|创业板注册制规则-详解股权激励新规
  7. Vue学习笔记(八) 组件进阶
  8. c语言程序设计王新萍课后答案,C语言程序设计教程
  9. 练习答案-分支与循环-超市买苹果练习-猜数字小游戏
  10. 牛客网 [编程题]数字和为sum的方法数
  11. 【bzoj1911】[Apio2010]特别行动队 斜率优化dp
  12. react 更新input 默认值setfieldsvalue_值得收藏的React知识点查漏补缺
  13. [在今天的历史]他们终于要对我下毒手了
  14. 如何在几天时间内快速理解一个陌生行业?
  15. oracle 开启事务_javaSE第十四部分 JDBC(2)mysql事务和JDBC实现事务
  16. JavaScript数据类型之String
  17. QQ防撤回9.0.2 软件 源码 源文件
  18. Word WPS 标题二编号未跟随一级标题
  19. H.264 H.265 数据量及存储量计算
  20. 判断一个数是否为两个素数的乘积

热门文章

  1. 手动写一个上传图片的组件,不适用插件,包括限制图片大小,格式
  2. 如果因为断电等导致文件损坏的系统无法开启的解决办法(鸟哥私房菜)
  3. LeetCode 590. N叉树的后序遍历(N-ary Tree Postorder Traversal)
  4. Android Studio在创建项目是一直处于building “project name”gradle project info的解决办法...
  5. mouseover与mouseenter、 mouseout与mouseleave的区别
  6. PHP文件系统-文件的读写操作
  7. 移动Web开发之流式布局笔记
  8. NeurIPS 2021揭榜,接收率创九年新高,论文列表已公布,你的文章中了吗?
  9. 位置编码在注意机制中的作用
  10. 如何在基于Aspect的情感分析中结合BERT和语法信息