二叉树的链式存储结构--二叉链表
1 二叉树的链式存储结构
//二叉链表的结点结构定义typedef int TElemType; typedef struct BiTNode {TElemType data;struct BiTNode *lchild;struct BiTNode *rchild; }BiTNode;typedef struct BiTNode *BiTree;
结构示意图如下:
2 二叉树的遍历方法
(1)前序遍历:先访问根结,然后前序遍历左子树,再前序遍历右子树。下面这颗二叉树的前序遍历结果为ABDHKECFIGJ
//二叉树的前序遍历递归算法 void PreOrderTraverse(BiTree T) {if (T == NULL) {return}printf("%c", T->data);PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild); }
(2)中序遍历:先中序遍历左子树,然后访问根结点,最后再中序遍历右子树。上面这颗二叉树的中序遍历结果为HKDBEAIFCGJ
//二叉树的中序遍历递归算法 void InOrderTraverse(BiTree T) {if (T == NULL) {return}PreOrderTraverse(T->lchild);printf("%c", T->data);PreOrderTraverse(T->rchild); }
(3)后序遍历:先后续遍历左子树,再后续遍历右子树,最后访问根结点。上面这颗二叉树的后序遍历结果为KHDEBIFJGCA
//二叉树的后序遍历递归算法 void InOrderTraverse(BiTree T) {if (T == NULL) {return}PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);printf("%c", T->data); }
3 二叉树的建立
如果我们要建立一个下图中左图这样的树,为了能让每个结点确认是否有左右孩子,我们对它进行了扩展,变成右图的样子。也就是将二叉树中没有结点的空指针引出一个续结点,其值为一个特定的值“#”。我们称这种处理过的二叉树为原二叉树的扩展二叉树。扩展二叉树就可以做到一个遍历序列确定一棵二叉树了。比如右图的遍历序列就为AB#D##C##。
我们把刚才前序遍历序列用键盘挨个输入,就创建出一棵二叉树了。
//按前序输入二叉树中结点的值 void createBiTree(BiTree *T) {TElemType ch;scanf("%d", &ch);if (ch == 0) { //0表示空结点*T = NULL;} else {*T = (BiTree)malloc(sizeof(BiTNode));if (!*T) {exit(OVERFLOW);}(*T)->data = ch; //生成根结点createBiTree(&(*T)->lchild); //构造左子树createBiTree(&(*T)->rchild); //构造右子树 } }
其实建立二叉树,也是利用了递归的思想。只不过在原来应该打印结点的地方,改成了生成结点,给结点赋值的操作而已。
转载于:https://www.cnblogs.com/muzijie/p/5664695.html
二叉树的链式存储结构--二叉链表相关推荐
- 二叉树的链式存储结构
文章目录 前言 正文 总结 前言 上一节讲了二叉树的顺序存储,通过学习你会发现,其实二叉树并不适合用数组存储,因为并不是每个二叉树都是完全二叉树,普通二叉树使用顺序表存储或多或多会存在空间浪费的现象. ...
- C语言手写二叉树(链式存储结构)
C语言手写二叉树(链式存储结构) 二叉树结构 二叉树基本运算 代码 图例(main函数执行过程如下:) 阶段I 阶段II 阶段III 阶段IV 阶段V 先序遍历输出过程 二叉树结构 二叉树可以用顺序存 ...
- 数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序、中序、后序、层次)和线索二叉树
二叉树每个节点至多只有两棵子树(即二叉树中不存在度大于2的节点),并且二叉树的子树有左右之分,其次序不能任意颠倒. 1. 二叉树 二叉树一般采用链式存储结构,用链表节点来存储二叉树中每个节点.在二叉树 ...
- 二叉树的链式存储结构(线索二叉树)
一.链式存储结构 由于顺序存储二叉树的空间利用率较低,因此二叉树一般都采用链式存储结构,用链表结点来存储二叉树中的每个结点.在二叉树中,结点结构通过包括若干数据域和若干指针域,二叉链表至少包含3个域: ...
- (数据结构)二叉树的链式存储结构
二叉树的顺序存储的缺点 因为并不是每个二叉树都是完全二叉树,普通二叉树使用顺序表存储或多或少会存在空间浪费的现象 图 1 普通二叉树的转化 如上图 1,普通二叉树里只有二个元素,最好的存储方式当然是开 ...
- 线性表的链式存储结构以及单链表的插入和删除原理实现
线性表的链式存储结构 线性表中的每个元素最多只有一个前驱元素和一个后继元素(其逻辑结构),因此可以采用链式存储结构存储. 链表 线性表的链式存储结构称为链表.在链表中每个结点不仅包含有元素本身的信息( ...
- 数据结构 树的链式存储(二叉表示法)
//树的链式存储--二叉表示法 #include<stdio.h> #include<stdlib.h> #include<string.h>typedef str ...
- 栈的链式存储结构(企业级链表)
#include<stdio.h> #include<stdlib.h> #include<string.h> struct StackNode{struct St ...
- php数据结构链表代码,数据结构之线性表——链式存储结构之单链表(php代码实现)...
/** * * 1. 类LNode用作创建单链表时,生成新的节点. * 2. 类SingleLinkList用于创建单链表以及对单链表的一些操作方法(实例化此类就相当于创建了一个空链表) * 3. C ...
最新文章
- Aurora HDR 2019中文版
- 学习Python编程,推荐最好的五本参考书,必读~~~
- B01_NumPy Ndarray对象(ndarray内容结构,参数,多维,最小维度,dtype参数)
- POJ - 2248 Addition Chains(dfs+迭代加深)
- Linux学习_菜鸟教程_3
- svn之bash: syntax error near unexpected token `(‘ 解决办法
- 一步步编写操作系统 25 cpu的保护模式
- Qt 互斥量 QMutex
- 这里90%的程序员根本就不算程序员。
- 平板电脑(台电x80HD)安装Ubuntu18.04教程- Z3735系列CPU通用
- 深度学习入门基于python的理论与实现
- word页面顺序倒过来_WORD2010双面打印出来的是倒过来的,不是按顺序的怎么设置...
- js学习小计5-零宽断言
- SYSLINUX 中文简介(怎样使用)
- 蓝牙耳机能链接计算机,蓝牙耳机,小编教你蓝牙耳机怎么连接电脑
- cf950f Curfew
- 数据结构之链表(Java实现)
- 【ng-alain】解决sf设置了visibleIf的字段,默认执行required验证
- 【Excel 教程系列第 6 篇】制作斜线表头
- 【Bug】ValueError: Solver lbfgs supports only ‘l2‘ or ‘none‘ penalties, got l1 penalty
热门文章
- UESTC_摩天轮 2015 UESTC Training for Dynamic ProgrammingProblem K
- web前端——html基础笔记 NO.12{css布局模型(流动,浮动,层模型)}
- 如何解决Contacts中的多音字排序错误问题
- Mysql数据库“Communications link failure due to underlying exception”问题
- win10系统Mysql5.7服务启动报:1053错误:服务没有及时响应启动或控制请求
- CodeForces 699C - Vacations
- Tuple解决在视图中通过razor获取控制器传递给视图的匿名对象的报错问题
- POJ3111 K Best —— 01分数规划 二分法
- 分区格式化/挂载数据盘
- Basic Sorting Algorithms