C++树——遍历二叉树
在讲遍历之前,我们要先创建一个树:

#include <iostream>
using namespace std;
typedef struct node;
typedef node *tree; struct node{
int data; // 结点数值
tree left,right; // 左子树和右子树
};
tree bt;
遍历二叉树有三种方式:
先序遍历:
先序遍历的操作如下:
- 访问根结点
- 先序遍历左子树(递归)
- 先序遍历右子树(递归)
二叉树bt的先序遍历结果:12347536
代码如下:
void preorder(tree bt){
if (bt){ // 判断不为空二叉树
cout << bt.data;
preorder(bt.left); // 递归遍历左子树
preorder(bt.right); // 递归遍历右子树
}
}
中序遍历:
中序遍历的操作如下:
- 中序遍历左子树(递归)
- 访问根结点
- 中序遍历右子树(递归)
二叉树bt的中序遍历结果:7425136
代码如下:
void inorder(tree bt){
if (bt){ // 判断不为空二叉树
inorder(bt.left); // 递归遍历左子树
cout << bt.data;
inorder(bt.right); // 递归遍历右子树
}
}
后序遍历:
后序遍历的操作如下:
- 后序遍历左子树(递归)
- 后序遍历右子树(递归)
- 访问根结点
二叉树bt的后序遍历的结果:7452631
代码如下:
void postorder(tree bt){
if (bt){ // 判断不为空二叉树
postorder(bt.left); // 递归遍历左子树
postorder(bt.right); // 递归遍历右子树
cout << bt.data;
}
}
小结:我们使用递归的方式遍历了二叉树,大家仔细观察可以发现,先序遍历就是先访问根结点,再递归,中序遍历是把访问根结点放中间,后续遍历是最后访问。
补充知识:
表达式:a+b*c
表达式二叉树:

前缀表达式(波兰式):+a*bc
中缀表达式:a+b*c/d
后缀表达式(逆波兰式):abc*+
怎么将中缀表达式转换为前缀表达式或后缀表达式呢?只需像前序遍历和后序遍历一样遍历表达二叉树即可。
C++树——遍历二叉树的更多相关文章
- 二叉树-二叉查找树-AVL树-遍历
一.二叉树 定义:每个节点都不能有多于两个的儿子的树. 二叉树节点声明: struct treeNode { elementType element; treeNode * left; treeNod ...
- lintcode :前序遍历和中序遍历树构造二叉树
解题 前序遍历和中序遍历树构造二叉树 根据前序遍历和中序遍历树构造二叉树. 样例 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 / \ 1 3 注意 你可以假设树中不存 ...
- lintcode: 中序遍历和后序遍历树构造二叉树
题目 中序遍历和后序遍历树构造二叉树 根据中序遍历和后序遍历树构造二叉树 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下的树: 2 / \ 1 3 注意 你可 ...
- python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)
python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...
- LintCode-72.中序遍历和后序遍历树构造二叉树
中序遍历和后序遍历树构造二叉树 根据中序遍历和后序遍历树构造二叉树 注意事项 你可以假设树中不存在相同数值的节点 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下的树: ...
- LintCode-73.前序遍历和中序遍历树构造二叉树
前序遍历和中序遍历树构造二叉树 根据前序遍历和中序遍历树构造二叉树. 注意事项 你可以假设树中不存在相同数值的节点 样例 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: ...
- PTA L2-006 树的遍历-二叉树的后序遍历+中序遍历,输出层序遍历 团体程序设计天梯赛-练习集
L2-006 树的遍历(25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤),是二叉树中结点的 ...
- javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作
树型结构是一类非常重要的非线性结构.直观地,树型结构是以分支关系定义的层次结构. 树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构:在数据库系统中,可用树来组织信息:在分 ...
- [leetcode/lintcode 题解] 前序遍历和中序遍历树构造二叉树
[题目描述] 根据前序遍历和中序遍历树构造二叉树. 在线评测地址: https://www.jiuzhang.com/solution/construct-binary-tree-from-preor ...
随机推荐
- NYOJ746——整数划分(四)
描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到了一个难题,让他百思不得其解,他非常郁闷..亲爱的你能帮帮他吗? 问题是我们经常见到的整 ...
- hdu5391 Zball in Tina Town
Problem Description Tina Town is a friendly place. People there care about each other. Tina has a ba ...
- .NET并发编程-函数闭包
本系列学习在.NET中的并发并行编程模式,实战技巧 内容目录 函数式编程闭包的应用记忆化函数缓存 函数式编程 一个函数输出当做另一个函数输入.有时候一个复杂问题,我们拆分成很多个步骤函数,这些函数组合 ...
- MySQL 语句及其种类
DDL(Data Definition Language) DDL(Data Definition Language),数据定义语言 CREATE:创建数据库和表等对象 DROP:删除数据库和表等对象 ...
- eclipse中使用debug,显示参数配置
打开Window---->Preferences------>java------>Editor-------->Hovers 效果:
- 一些CTF题目--20/9/3
1. 看源码 POST方法.Extract覆盖. 直接url ?参数不行,因为POST参数不在URL上,GET参数才在 Burpsuite抓包,改成 pass=1&thepassword_1 ...
- HDU 5608 function(莫比乌斯反演 + 杜教筛)题解
题意: 已知\(N^2-3N+2=\sum_{d|N}f(d)\),求\(\sum_{i=1}^nf(i) \mod 1e9+7\),\(n\leq1e9\) 思路: 杜教筛基础题? 很显然这里已经设 ...
- JavaScript this All In One
JavaScript this All In One js, this, bind, call, apply, new, function, arrow function, constructor f ...
- npm install 原理
npm install 原理 https://docs.npmjs.com/about-npm/ npm consists of three distinct components: the webs ...
- [转]自动驾驶平台Apollo 2.5环境搭建
原文地址:https://blog.csdn.net/jinzhuojun/article/details/80210180,转载主要方便随时查阅,如有版权要求,请及时联系. 我们知道,自动驾驶在学界 ...