我们在上一章中,学习了二叉树的数据结构。因为二叉树的特殊性,它不同于普通的树,所以可以使用顺序存储结构来存储。但是,用顺序存储结构会存在浪费空间的弊端。之后,我们学习了二叉链表。用链式存储结构存储树,结点结构为一个数据域data,两个指针域lchild、rchild。树的数据结构讲完 ...
对于二叉树的遍历通常习惯采用递归的方法,当树的规模很大的时候,递归的深度就会很深,这就导致了对空间的浪费。在此,我们先不讨论二叉树遍历的本质,以及递归的详细过程。我先先来研究一下,二叉树本身: 图 二叉树 图 所示为一个二叉树的结构,我们注意结点的特征。结点包含了三个数据:存储值,指向左子节点的左指针,以及指向右子节点的右指针。 我们考虑在计算机中的实现:对于每一个节点,我们都需要分配相同大小的 ...
2019-03-02 11:54 0 874 推荐指数:
我们在上一章中,学习了二叉树的数据结构。因为二叉树的特殊性,它不同于普通的树,所以可以使用顺序存储结构来存储。但是,用顺序存储结构会存在浪费空间的弊端。之后,我们学习了二叉链表。用链式存储结构存储树,结点结构为一个数据域data,两个指针域lchild、rchild。树的数据结构讲完 ...
线索二叉树 (threaded binary tree) 上图所示的二叉链表,存在多个空指针域。假设一个二叉链表的结点数为n,则共有2n个指针域。而n个结点的二叉树共有n-1条分支。所以空指针域的个数为:2n - (n-1) = n+1。 可以在这 ...
线索二叉树利用二叉树空余的指针域,来实现二叉树的链式化。然后,就可以通过前驱,后继像双向链表一样根据某种遍历次序对树的结点进行访问。 数据结构: 线索二叉树的操作: 建立线索二叉树: 不同的遍历顺序,会得到不同的线索二叉树。 一般使第线索 ...
1.中序线索二叉树 数据结构: 首先理解如何建立中序线索化二叉树。如果结点的左子树存在,lt为0 。不存在为1;右子树同理。直接对根节点进行中序遍历,在不存在的场合设置标志位和前驱、后继。 把二叉树看成中序遍历序列,序列的第一个结点(最左下结点)的前驱为NULL,最后一个结点 ...
1.遍历前序线索二叉树 如果当前结点有左孩子,则应该更新p指向左孩子,否则指向右孩子,这与中序遍历线索二叉树不同,中序遍历时,能够确定当前结点的左子树一定被访问过了,直接更新p指向右孩子 2.前序线索化二叉树 3.删除线索二叉树所占空间 ...
后序线索二叉树中,结点的后继: 如果结点的双亲有右孩子,则结点的后继为双亲的右子树中第一个被访问的结点 如果结点的双亲没有右孩子,则结点的后继为双亲 如果结点为双亲的右孩子,则结点的后继为双亲 因为找到后序遍历中,找到结点的后继需要知道节点的双亲,所以可以用三叉链表 ...
二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历。二叉树作为存储结构时,一个节点只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱或后继信息。 也就是说 ...
遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列即是对一个非线性结构进行线性化操作,使除第一个和最后一个节点外,每一个节点有且只有一个直接前驱,直接后继 二叉树作为存储结构只能找到节点的左孩子右孩子信息,而不能直接得到结点在任一序列中的前驱和后继,这种信息只有在遍历的动态过程中可以看到 ...