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

二叉树的链式存储结构--二叉链表相关推荐

  1. 二叉树的链式存储结构

    文章目录 前言 正文 总结 前言 上一节讲了二叉树的顺序存储,通过学习你会发现,其实二叉树并不适合用数组存储,因为并不是每个二叉树都是完全二叉树,普通二叉树使用顺序表存储或多或多会存在空间浪费的现象. ...

  2. C语言手写二叉树(链式存储结构)

    C语言手写二叉树(链式存储结构) 二叉树结构 二叉树基本运算 代码 图例(main函数执行过程如下:) 阶段I 阶段II 阶段III 阶段IV 阶段V 先序遍历输出过程 二叉树结构 二叉树可以用顺序存 ...

  3. 数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序、中序、后序、层次)和线索二叉树

    二叉树每个节点至多只有两棵子树(即二叉树中不存在度大于2的节点),并且二叉树的子树有左右之分,其次序不能任意颠倒. 1. 二叉树 二叉树一般采用链式存储结构,用链表节点来存储二叉树中每个节点.在二叉树 ...

  4. 二叉树的链式存储结构(线索二叉树)

    一.链式存储结构 由于顺序存储二叉树的空间利用率较低,因此二叉树一般都采用链式存储结构,用链表结点来存储二叉树中的每个结点.在二叉树中,结点结构通过包括若干数据域和若干指针域,二叉链表至少包含3个域: ...

  5. (数据结构)二叉树的链式存储结构

    二叉树的顺序存储的缺点 因为并不是每个二叉树都是完全二叉树,普通二叉树使用顺序表存储或多或少会存在空间浪费的现象 图 1 普通二叉树的转化 如上图 1,普通二叉树里只有二个元素,最好的存储方式当然是开 ...

  6. 线性表的链式存储结构以及单链表的插入和删除原理实现

    线性表的链式存储结构 线性表中的每个元素最多只有一个前驱元素和一个后继元素(其逻辑结构),因此可以采用链式存储结构存储. 链表 线性表的链式存储结构称为链表.在链表中每个结点不仅包含有元素本身的信息( ...

  7. 数据结构 树的链式存储(二叉表示法)

    //树的链式存储--二叉表示法 #include<stdio.h> #include<stdlib.h> #include<string.h>typedef str ...

  8. 栈的链式存储结构(企业级链表)

    #include<stdio.h> #include<stdlib.h> #include<string.h> struct StackNode{struct St ...

  9. php数据结构链表代码,数据结构之线性表——链式存储结构之单链表(php代码实现)...

    /** * * 1. 类LNode用作创建单链表时,生成新的节点. * 2. 类SingleLinkList用于创建单链表以及对单链表的一些操作方法(实例化此类就相当于创建了一个空链表) * 3. C ...

最新文章

  1. Aurora HDR 2019中文版
  2. 学习Python编程,推荐最好的五本参考书,必读~~~
  3. B01_NumPy Ndarray对象(ndarray内容结构,参数,多维,最小维度,dtype参数)
  4. POJ - 2248 Addition Chains(dfs+迭代加深)
  5. Linux学习_菜鸟教程_3
  6. svn之bash: syntax error near unexpected token `(‘ 解决办法
  7. 一步步编写操作系统 25 cpu的保护模式
  8. Qt 互斥量 QMutex
  9. 这里90%的程序员根本就不算程序员。
  10. 平板电脑(台电x80HD)安装Ubuntu18.04教程- Z3735系列CPU通用
  11. 深度学习入门基于python的理论与实现
  12. word页面顺序倒过来_WORD2010双面打印出来的是倒过来的,不是按顺序的怎么设置...
  13. js学习小计5-零宽断言
  14. SYSLINUX 中文简介(怎样使用)
  15. 蓝牙耳机能链接计算机,蓝牙耳机,小编教你蓝牙耳机怎么连接电脑
  16. cf950f Curfew
  17. 数据结构之链表(Java实现)
  18. 【ng-alain】解决sf设置了visibleIf的字段,默认执行required验证
  19. 【Excel 教程系列第 6 篇】制作斜线表头
  20. 【Bug】ValueError: Solver lbfgs supports only ‘l2‘ or ‘none‘ penalties, got l1 penalty

热门文章

  1. UESTC_摩天轮 2015 UESTC Training for Dynamic ProgrammingProblem K
  2. web前端——html基础笔记 NO.12{css布局模型(流动,浮动,层模型)}
  3. 如何解决Contacts中的多音字排序错误问题
  4. Mysql数据库“Communications link failure due to underlying exception”问题
  5. win10系统Mysql5.7服务启动报:1053错误:服务没有及时响应启动或控制请求
  6. CodeForces 699C - Vacations
  7. Tuple解决在视图中通过razor获取控制器传递给视图的匿名对象的报错问题
  8. POJ3111 K Best —— 01分数规划 二分法
  9. 分区格式化/挂载数据盘
  10. Basic Sorting Algorithms