在讲遍历之前,我们要先创建一个树:

#include <iostream>
using namespace std;
typedef struct node;
typedef node *tree; struct node{
int data; // 结点数值
tree left,right; // 左子树和右子树
};
tree bt;

遍历二叉树有三种方式:

先序遍历:

先序遍历的操作如下:

  1. 访问根结点
  2. 先序遍历左子树(递归)
  3. 先序遍历右子树(递归)

二叉树bt的先序遍历结果:12347536

代码如下:

void preorder(tree bt){
if (bt){ // 判断不为空二叉树
cout << bt.data;
preorder(bt.left); // 递归遍历左子树
preorder(bt.right); // 递归遍历右子树
}
}

中序遍历:

中序遍历的操作如下:

  1. 中序遍历左子树(递归)
  2. 访问根结点
  3. 中序遍历右子树(递归)

二叉树bt的中序遍历结果:7425136

代码如下:

void inorder(tree bt){
if (bt){ // 判断不为空二叉树
inorder(bt.left); // 递归遍历左子树
cout << bt.data;
inorder(bt.right); // 递归遍历右子树
}
}

后序遍历:

后序遍历的操作如下:

  1. 后序遍历左子树(递归)
  2. 后序遍历右子树(递归)
  3. 访问根结点

二叉树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++树——遍历二叉树的更多相关文章

  1. 二叉树-二叉查找树-AVL树-遍历

    一.二叉树 定义:每个节点都不能有多于两个的儿子的树. 二叉树节点声明: struct treeNode { elementType element; treeNode * left; treeNod ...

  2. lintcode :前序遍历和中序遍历树构造二叉树

    解题 前序遍历和中序遍历树构造二叉树 根据前序遍历和中序遍历树构造二叉树. 样例 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 / \ 1 3 注意 你可以假设树中不存 ...

  3. lintcode: 中序遍历和后序遍历树构造二叉树

    题目 中序遍历和后序遍历树构造二叉树 根据中序遍历和后序遍历树构造二叉树 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下的树: 2 /  \ 1    3 注意 你可 ...

  4. python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)

    python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...

  5. LintCode-72.中序遍历和后序遍历树构造二叉树

    中序遍历和后序遍历树构造二叉树 根据中序遍历和后序遍历树构造二叉树 注意事项 你可以假设树中不存在相同数值的节点 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下的树: ...

  6. LintCode-73.前序遍历和中序遍历树构造二叉树

    前序遍历和中序遍历树构造二叉树 根据前序遍历和中序遍历树构造二叉树. 注意事项 你可以假设树中不存在相同数值的节点 样例 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树:    ...

  7. PTA L2-006 树的遍历-二叉树的后序遍历+中序遍历,输出层序遍历 团体程序设计天梯赛-练习集

    L2-006 树的遍历(25 分)   给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤),是二叉树中结点的 ...

  8. javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作

    树型结构是一类非常重要的非线性结构.直观地,树型结构是以分支关系定义的层次结构. 树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构:在数据库系统中,可用树来组织信息:在分 ...

  9. [leetcode/lintcode 题解] 前序遍历和中序遍历树构造二叉树

    [题目描述] 根据前序遍历和中序遍历树构造二叉树. 在线评测地址: https://www.jiuzhang.com/solution/construct-binary-tree-from-preor ...

随机推荐

  1. qmh的测试1

    题目:传送门 首先输入一个n,之后输入n个数a(1<=a<=1e7),对这n个数排序后,你需要找到所有的它们连续的长度.把这些连续的长度排序后输出 输入 输入: 8 1 5 2 7 4 5 ...

  2. FZU 2129 子序列个数(DP)题解

    题意:求子序列种数 思路:dp[i]代表到i的所有种数,把当前i放到末尾,那么转移方程dp[i] = dp[i - 1] + dp[i -1],但是可能存在重复,比如1 2 3 2,在第2位置的时候出 ...

  3. 5种设置ASP.NET Core应用程序URL的方法

    默认情况下,ASP.NET Core应用程序监听以下URL: http://localhost:5000 https://localhost:5001 在这篇文章中,我展示了5种不同的方式来更改您的应 ...

  4. element-ui UI 组件库剖析

    element-ui UI 组件库剖析 /* Automatically generated by './build/bin/build-entry.js' */ https://github.com ...

  5. Worktile vs Teambition

    Worktile vs Teambition 项目管理.团队协作 企业服务.协同办公 worktile 易成科技 北京易成星光科技有限公司 https://www.tianyancha.com/com ...

  6. Generator function vs Async/Await

    Generator function vs Async/Await generator async /await refs xgqfrms 2012-2020 www.cnblogs.com 发布文章 ...

  7. WebVR & CSS 3D & WebGL

    WebVR & CSS 3D & WebGL VR https://developer.mozilla.org/en-US/docs/Web/API/WebVR_API https:/ ...

  8. Online analog video interview

    Online analog video interview 在线模拟视频面试 English 口语 https://www.pramp.com/#/ https://www.pramp.com/faq ...

  9. nodejs stream 创建读写流

    const fs = require("fs"); const { Writable, Readable, Duplex, Transform } = require(" ...

  10. c++ DWORD和uintptr_t

    x86模式 DWORD 是4字节 x86模式 uintptr_t 是4字节 x64模式 DWORD 是4字节 x64模式 uintptr_t 是8字节 std::cout << sizeo ...