c/c++实现二叉树的创建以及前中后序遍历
二叉树(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++实现二叉树的创建以及前中后序遍历相关推荐
- 二叉树(C++):创建,前中后序遍历(递归+非递归),获取叶子节点个数,获取树的高度
文章目录 前言 创建二叉树 先序遍历 中序遍历 后序遍历 获取叶子节点个数 获取树的高度 测试代码 前言 现有如下二叉树: 关于二叉树的相关操作,我们能够发现二叉树从根节点到子节点,以及每个中间节点基 ...
- 二叉树的先序创建、前中后序遍历(递归)C++
二叉树定义 二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树.二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子 ...
- 二叉树的创建以及先中后序遍历
#include<iostream>using namespace std;typedef struct BiTNode{char data;//结点的数据域struct BiTNode ...
- 二叉树删除节点以及前中后序遍历
public class BinaryTreeDemo {public static void main(String args[]){Employee emp1= new Employee(1,&q ...
- 二叉树前中后序遍历+刷题【中】【数据结构/初阶/C语言实现】
文章目录 1. 二叉树基础操作 1.1 二叉树遍历 1.1.1 前序遍历 前序遍历(Pre-Order Traversal) 1.1.2 中序遍历 中序遍历(In-Order Traversal) 1 ...
- 二叉树前中后序遍历以及节点计算
二叉树前中后序遍历以及节点计算 二叉树 分类 二叉链的数据结构 三叉链的数据结构 四种遍历方法 深度优先遍历:前中后序 广度优先遍历:层序遍历 计算 节点个数 叶子节点个数 树的高度 第k层的节点个数 ...
- 二叉树的前,中,后序遍历(思路分析) [Java][数据结构]
二叉树的前,中,后序遍历(思路分析) 前序遍历: 先输出父节点, 再遍历左子树和右子树 中序遍历: 先遍历左子树, 再输出父节点,再遍历右子树 后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点 ...
- 二叉树N叉数的前中后序遍历总结,python实现递归法和迭代法
关于二叉树的前序遍历(preoder).中序遍历(inorder)和后序遍历(postorder),实际上只需要记住:左子节点一定在右子节点的左边(左右),所谓前中后序遍历就是根节点的位置不同,前序是 ...
- [Leedcode][JAVA][第94/144/145题][前中后序遍历][递归][迭代][二叉树]
[问题描述][] 前序遍历 先输出当前结点的数据,再依次遍历输出左结点和右结点 中序遍历 先遍历输出左结点,再输出当前结点的数据,再遍历输出右结点 后续遍历 先遍历输出左结点,再遍历输出右结点,最后输 ...
- 二叉树的层序遍历和前中后序遍历代码 迭代/递归
二叉树的层序遍历和前中后序遍历代码 迭代/递归 只记录代码.思路参考代码随想录:https://github.com/youngyangyang04/leetcode-master/blob/mast ...
最新文章
- matlab配对交易回测,精品案例 | 经典投资策略之配对交易策略
- C-#数据库方面好书
- Ajax提交后Moedl And View不进行页面跳转的解决方案
- BZOJ 4388 [JOI2012春季合宿]Invitation (线段树、二叉堆、最小生成树)
- python编程从入门到精通读书笔记(基础知识)
- ITK:创建3D体积
- Presto基本概念
- 淘宝成全球电商第一人气网站
- Mac Android studio: Gradle Build Running 、 run build 运行卡顿 、 加载慢问题问题(亲测可用)
- paip.提升效率---------文件搜索工具总结
- 还在担心找不到驱动程序吗?driveridentifier三步帮你解决所有
- hardfault常见原因_keil遇到hardfault时原因的查找
- 农历大小月的确定方法
- python读取txt 符号分割 读取一条删除一条
- CC2540/CC2541/CC254x之OSAL操作系统抽象层
- 解决win10测试麦克风显示有声音,但是实际使用teams还有其他录音设备时没有声音
- 西班牙语dele等级_DELE——西班牙语水平考试
- Pandas描述性统计
- MIFARE Classic S50技术详解
- 【转载】抽象语法树简介(有图)