二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分。

遍历方式

前序遍历:root -> left -> right
中序遍历:left -> root -> right
后续遍历:left ->right -> root

思路:

利用结构体替代二叉树,并利用递归的思想构建二叉树以及遍历。
因为先序序列和中序序列可以确定唯一的一个二叉树,利用这一思想,构建数组a和数组b,并且a为二叉树的先序序列,b为二叉树的中序序列。利用先序序列确定根,而中序序列确定左右的思想,每次先从a中找到一个根,在对应的b数组中找到根所对应的位置,再进行递归。下面给出思路图解。

思路图解


实现代码

#include <iostream>using namespace std;typedef struct btNode
{int val;struct btNode *lchild;struct btNode *rchild;
} BTNode;BTNode *CreateBTree(int a[], int b[], int n)
{ //先序序列,中序序列,共有多少个元素if (n <= 0)return NULL;int root = a[0]; //由先序序列确定根节点BTNode *bt = (BTNode *)malloc(sizeof(BTNode));bt->val = root;int i;for (i = 0; i < n; i++){if (b[i] == root){break;}}bt->lchild = CreateBTree(a + 1, b, i);bt->rchild = CreateBTree(a + i + 1, b + i + 1, n - i - 1);return bt;
}//先序遍历
void preorderTraversal(BTNode *r)
{if (r == NULL)return;cout << r->val << "->";preorderTraversal(r->lchild);preorderTraversal(r->rchild);
}//中序遍历
void middleorderTraversal(BTNode *r)
{if (r == NULL)return;middleorderTraversal(r->lchild);cout << r->val << "->";middleorderTraversal(r->rchild);
}//后序遍历
void postorderTraversal(BTNode *r)
{if (r == NULL)return;postorderTraversal(r->lchild);postorderTraversal(r->rchild);cout << r->val << "->";
}int main()
{int a[] = {1, 2, 4, 5, 3, 6, 7}; //二叉树 先序序列int b[] = {4, 2, 5, 1, 6, 3, 7}; //二叉树 中序序列BTNode *bt = CreateBTree(a, b, 7);cout<<"The preOrderTraversal is: ";preorderTraversal(bt);cout << endl;cout<<"The middleorderTraversal is: ";middleorderTraversal(bt);cout << endl;cout<<"The postorderTraversal is: ";postorderTraversal(bt);cout << endl;system("pause");return 0;
}

运行结果

c/c++实现二叉树的创建以及前中后序遍历相关推荐

  1. 二叉树(C++):创建,前中后序遍历(递归+非递归),获取叶子节点个数,获取树的高度

    文章目录 前言 创建二叉树 先序遍历 中序遍历 后序遍历 获取叶子节点个数 获取树的高度 测试代码 前言 现有如下二叉树: 关于二叉树的相关操作,我们能够发现二叉树从根节点到子节点,以及每个中间节点基 ...

  2. 二叉树的先序创建、前中后序遍历(递归)C++

    二叉树定义 二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树.二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子 ...

  3. 二叉树的创建以及先中后序遍历

    #include<iostream>using namespace std;typedef struct BiTNode{char data;//结点的数据域struct BiTNode ...

  4. 二叉树删除节点以及前中后序遍历

    public class BinaryTreeDemo {public static void main(String args[]){Employee emp1= new Employee(1,&q ...

  5. 二叉树前中后序遍历+刷题【中】【数据结构/初阶/C语言实现】

    文章目录 1. 二叉树基础操作 1.1 二叉树遍历 1.1.1 前序遍历 前序遍历(Pre-Order Traversal) 1.1.2 中序遍历 中序遍历(In-Order Traversal) 1 ...

  6. 二叉树前中后序遍历以及节点计算

    二叉树前中后序遍历以及节点计算 二叉树 分类 二叉链的数据结构 三叉链的数据结构 四种遍历方法 深度优先遍历:前中后序 广度优先遍历:层序遍历 计算 节点个数 叶子节点个数 树的高度 第k层的节点个数 ...

  7. 二叉树的前,中,后序遍历(思路分析) [Java][数据结构]

    二叉树的前,中,后序遍历(思路分析) 前序遍历: 先输出父节点, 再遍历左子树和右子树 中序遍历: 先遍历左子树, 再输出父节点,再遍历右子树 后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点 ...

  8. 二叉树N叉数的前中后序遍历总结,python实现递归法和迭代法

    关于二叉树的前序遍历(preoder).中序遍历(inorder)和后序遍历(postorder),实际上只需要记住:左子节点一定在右子节点的左边(左右),所谓前中后序遍历就是根节点的位置不同,前序是 ...

  9. [Leedcode][JAVA][第94/144/145题][前中后序遍历][递归][迭代][二叉树]

    [问题描述][] 前序遍历 先输出当前结点的数据,再依次遍历输出左结点和右结点 中序遍历 先遍历输出左结点,再输出当前结点的数据,再遍历输出右结点 后续遍历 先遍历输出左结点,再遍历输出右结点,最后输 ...

  10. 二叉树的层序遍历和前中后序遍历代码 迭代/递归

    二叉树的层序遍历和前中后序遍历代码 迭代/递归 只记录代码.思路参考代码随想录:https://github.com/youngyangyang04/leetcode-master/blob/mast ...

最新文章

  1. matlab配对交易回测,精品案例 | 经典投资策略之配对交易策略
  2. C-#数据库方面好书
  3. Ajax提交后Moedl And View不进行页面跳转的解决方案
  4. BZOJ 4388 [JOI2012春季合宿]Invitation (线段树、二叉堆、最小生成树)
  5. python编程从入门到精通读书笔记(基础知识)
  6. ITK:创建3D体积
  7. Presto基本概念
  8. 淘宝成全球电商第一人气网站
  9. Mac Android studio: Gradle Build Running 、 run build 运行卡顿 、 加载慢问题问题(亲测可用)
  10. paip.提升效率---------文件搜索工具总结
  11. 还在担心找不到驱动程序吗?driveridentifier三步帮你解决所有
  12. hardfault常见原因_keil遇到hardfault时原因的查找
  13. 农历大小月的确定方法
  14. python读取txt 符号分割 读取一条删除一条
  15. CC2540/CC2541/CC254x之OSAL操作系统抽象层
  16. 解决win10测试麦克风显示有声音,但是实际使用teams还有其他录音设备时没有声音
  17. 西班牙语dele等级_DELE——西班牙语水平考试
  18. Pandas描述性统计
  19. MIFARE Classic S50技术详解
  20. 【转载】抽象语法树简介(有图)

热门文章

  1. Java Set集合及Map集合详解
  2. WPF 加载GIF图片
  3. 大华相机SDK调用——主动采图、外触发、参数
  4. PC通过adb连接手机 无需root连接 需要root连接
  5. 数据通路、微操作序列
  6. WinEdt中xelatex.exe等exe did not succeed问题
  7. idea运行java项目js中文乱码如何解决
  8. Java集合面试题看这篇就够了
  9. 八大排序算法(C语言实现)
  10. Mysql表数据如何增加汇总统计行(GROUP BY WITH ROLLUP函数用法)