用二叉树实现存储信息

合集下载

二叉树遍历操作的基本应用(复制、求深度、求叶子数、求节点数等)

二叉树遍历操作的基本应用(复制、求深度、求叶子数、求节点数等)

二叉树遍历操作的基本应用(复制、求深度、求叶子数、求节点数等)1. 引言1.1 概述二叉树是计算机科学领域中常用的数据结构之一,具有广泛的应用场景。

在二叉树的操作中,遍历是其中最基本和常见的操作之一。

通过遍历,我们可以按照特定规则依次访问二叉树中的所有节点。

本文将探讨二叉树遍历操作的基本应用,包括复制、求深度、求叶子数、求节点数等。

这些操作不仅在实际开发中有重要意义,而且对于理解和掌握二叉树数据结构及其相关算法也具有重要作用。

1.2 文章结构本文将分为五个部分进行论述。

首先,在引言部分(第1节)我们将概述文章的主题和目标。

紧接着,在第2节中,我们将介绍二叉树遍历的基本应用,包括复制、求深度、求叶子数和求节点数等。

在第3节中,我们将详细解析这些基本应用,并给出相应算法和实例分析。

接下来,在第4节中,我们将通过实际案例应用来验证并讨论这些基本应用的性能与适用范围。

最后,在第5节中总结全文内容,并对未来研究方向进行展望。

1.3 目的本文的目的是通过对二叉树遍历操作的基本应用进行详细剖析,帮助读者深入理解和掌握二叉树数据结构及其相关算法。

同时,我们希望通过实际案例应用与讨论,探讨如何优化算法性能、提高效率以及适应大规模二叉树遍历问题。

通过本文的阅读,读者将能够全面了解并应用二叉树遍历操作的基本方法,在实际开发中解决相关问题,并为进一步研究和探索提供思路与参考。

该部分主要介绍了文章的概述、结构和目的,引导读者了解全文并明确阅读目标。

2. 二叉树遍历的基本应用:二叉树是一种常见的数据结构,其遍历操作可以应用于多种实际问题中。

本节将介绍四个基本的二叉树遍历应用:复制二叉树、求二叉树的深度、求二叉树的叶子数和求二叉树的节点数。

2.1 复制二叉树:复制一个二叉树意味着创建一个与原始二叉树结构完全相同的新二叉树。

该应用场景在涉及对原始数据进行修改或者对数据进行独立操作时非常有用。

复制操作可以以递归方式实现,通过先复制左子树,再复制右子树,最后创建一个与当前节点值相等的新节点来完成。

实验报告:二叉树

实验报告:二叉树

实验报告:二叉树第一篇:实验报告:二叉树实验报告二叉树一实验目的1、进一步掌握指针变量,动态变量的含义;2、掌握二叉树的结构特性以及各种存储结构的特点及适用范围。

3、掌握用指针类型描述、访问和处理二叉树的运算。

4、熟悉各种存储结构的特征以及如何应用树结构解决具体问题。

二实验原理树形结构是一种应用十分广泛和重要的非线性数据结构,是一种以分支关系定义的层次结构。

在这种结构中,每个数据元素至多只有一个前驱,但可以有多个后继;数据元素之间的关系是一对多的层次关系。

树形结构主要用于描述客观世界中具有层次结构的数据关系,它在客观世界中大量存在。

遍历二叉树的实质是将非线性结构转为线性结构。

三使用仪器,材料计算机 2 Wndows xp 3 VC6.0四实验步骤【问题描述】建立一个二叉树,请分别按前序,中序和后序遍历该二叉树。

【基本要求】从键盘接受输入(按前序顺序),以二叉链表作为存储结构,建立二叉树(以前序来建立),并采用递归算法对其进行前序,中序和后序遍历,将结果输出。

【实现提示】按前序次序输入二叉树中结点的值(一个整数),0表示空树,叶子结点的特征是其左右孩子指针为空。

五实验过程原始记录基本数据结构描述; 2 函数间的调用关系;用类C语言描述各个子函数的算法;附录:源程序。

六试验结果分析将实验结果分析、实验中遇到的问题和解决问题的方法以及关于本实验项目的心得体会,写在实验报告上。

第二篇:数据结构-二叉树的遍历实验报告实验报告课程名:数据结构(C语言版)实验名:二叉树的遍历姓名:班级:学号:时间:2014.11.03一实验目的与要求1.掌握二叉树的存储方法2.掌握二叉树的三种遍历方法3.实现二叉树的三种遍历方法中的一种二实验内容• 接受用户输入一株二叉树• 输出这株二叉树的前根, 中根, 后根遍历中任意一种的顺序三实验结果与分析//*********************************************************** //头文件#include #include //*********************************************************** //宏定义#define OK 1 #define ERROR 0 #define OVERFLOW 0//*********************************************************** typedef struct BiTNode { //二叉树二叉链表存储结构char data;struct BiTNode *lChild,*rChild;}BiTNode,*BiTree;//******************************** *************************** int CreateBiTree(BiTree &T){ //按先序次序输入二叉中树结点的值,空格表示空树//构造二叉链表表示的二叉树T char ch;fflush(stdin);scanf(“%c”,&ch);if(ch==' ')T=NULL;else{ if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))return(OVERFLOW);T->data=ch;Creat eBiTree(T->lChild);CreateBiTree(T->rChild);} return(OK);} //********************************************************* void PreOrderTraverse(BiTree T){ //采用二叉链表存储结构,先序遍历二叉树的递归算法if(T){ printf(“%c”,T->data);PreOrderTraverse(T->lChild);PreOrd erTraverse(T->rChild);} } /***********************************************************/ void InOrderTraverse(BiTree T){ //采用二叉链表存储结构,中序遍历二叉树的递归算法if(T){ InOrderTraverse(T->lChild);printf(“%c”,T->data);InOrderT raverse(T->rChild);} }//*********************************************************** void PostOrderTraverse(BiTree T){ //采用二叉链表存储结构,后序遍历二叉树的递归算法if(T){ PostOrderTraverse(T->lChild);PostOrderTraverse(T->rChild) ;printf(“%c”,T->data);} }//*********************************************************** void main(){ //主函数分别实现建立并输出先、中、后序遍历二叉树printf(“please input your tree follow the PreOrder:n”);BiTNode *Tree;CreateBiTree(Tree);printf(“n先序遍历二叉树:”);PreOrderTraverse(Tree);printf(“n中序遍历二叉树:”);InOrderTraverse(Tree);printf(“n后序遍历二叉树:”);PostOrderTraverse(Tree);}图1:二叉树的遍历运行结果第三篇:数据结构二叉树操作验证实验报告班级:计算机11-2 学号:40 姓名:朱报龙成绩:_________实验七二叉树操作验证一、实验目的⑴ 掌握二叉树的逻辑结构;⑵ 掌握二叉树的二叉链表存储结构;⑶ 掌握基于二叉链表存储的二叉树的遍历操作的实现。

字典的两种实现原理

字典的两种实现原理

字典的两种实现原理字典是一种常用的数据结构,它能够存储键值对,并且可以高效地进行插入、删除和查找操作。

在实际应用中,字典有两种常见的实现原理,分别是哈希表和平衡二叉树。

一、哈希表实现原理哈希表是一种基于哈希函数的数据结构,它通过计算键的哈希值来确定存储位置。

哈希函数将键映射为一个固定大小的整数,这个整数就是键的哈希值。

哈希表通常使用数组来存储数据,数组的下标就是键的哈希值。

在哈希表中,通过哈希函数计算得到的哈希值可以直接用作数组的下标,从而快速地定位到存储位置。

当插入或查找一个键值对时,只需要通过哈希函数计算键的哈希值,然后在数组中进行操作即可。

这种操作的时间复杂度通常是常数级别的,即O(1)。

然而,哈希函数可能会产生冲突,即不同的键可能会计算得到相同的哈希值。

为了解决冲突问题,哈希表通常使用链表或者其他数据结构来存储相同哈希值的键值对。

当发生冲突时,只需要将新的键值对插入到链表的末尾即可。

由于哈希表的插入、删除和查找操作的时间复杂度都是O(1),所以它在实际应用中具有广泛的应用。

例如,在编程语言中,字典类型通常就是基于哈希表实现的。

另外,哈希表还被用于缓存、数据库索引等领域。

二、平衡二叉树实现原理平衡二叉树是一种特殊的二叉搜索树,它的左子树和右子树的高度差不超过1。

平衡二叉树的实现通常使用红黑树或者AVL树。

在平衡二叉树中,每个节点都包含一个键值对,且节点按照键的大小进行排序。

对于任意一个节点,它的左子树中的所有键都小于该节点的键,而右子树中的所有键都大于该节点的键。

这样,在平衡二叉树中查找一个键值对的时间复杂度是O(logn),其中n是树中节点的个数。

当插入或删除一个键值对时,平衡二叉树会通过旋转操作来保持树的平衡性。

旋转操作包括左旋和右旋,通过交换节点的位置来重新调整树的结构。

在插入或删除一个节点后,如果树的平衡性被破坏,就会进行旋转操作来恢复平衡。

平衡二叉树相对于哈希表的优势在于,它可以保持键值对的有序性。

二叉树的储存结构的实现及应用

二叉树的储存结构的实现及应用

二叉树的储存结构的实现及应用二叉树是一种常见的数据结构,它在计算机科学和算法设计中广泛应用。

二叉树的储存结构有多种实现方式,包括顺序储存结构和链式储存结构。

本文将从这两种储存结构的实现和应用角度进行详细介绍,以便读者更好地理解二叉树的储存结构及其在实际应用中的作用。

一、顺序储存结构的实现及应用顺序储存结构是将二叉树的节点按照从上到下、从左到右的顺序依次存储在一维数组中。

通常采用数组来实现顺序储存结构,数组的下标和节点的位置之间存在一定的对应关系,通过数学计算可以快速找到节点的父节点、左孩子和右孩子。

顺序储存结构的实现相对简单,利用数组的特性可以迅速随机访问节点,适用于完全二叉树。

1.1 实现过程在采用顺序储存结构的实现中,需要首先确定二叉树的深度,然后根据深度确定数组的长度。

通过数学计算可以得到节点间的位置关系,初始化数组并按照规定的顺序将二叉树节点逐一填入数组中。

在访问二叉树节点时,可以通过计算得到节点的父节点和子节点的位置,从而实现随机访问。

1.2 应用场景顺序储存结构适用于完全二叉树的储存和遍历,常见的应用场景包括二叉堆和哈夫曼树。

二叉堆是一种特殊的二叉树,顺序储存结构可以方便地实现它的插入、删除和调整操作,因此在堆排序、优先队列等算法中得到广泛应用。

哈夫曼树则是数据压缩领域的重要应用,通过顺序储存结构可以有效地构建和处理哈夫曼树,实现压缩编码和解码操作。

二、链式储存结构的实现及应用链式储存结构是通过指针将二叉树的节点连接起来,形成一个类似链表的结构。

每个节点包含数据域和指针域,指针域指向节点的左右孩子节点。

链式储存结构的实现相对灵活,适用于任意形态的二叉树,但需要额外的指针空间来存储节点的地址信息。

2.1 实现过程在链式储存结构的实现中,每个节点需要定义为一个包含数据域和指针域的结构体或类。

通过指针来连接各个节点,形成一个二叉树的结构。

在树的遍历和操作中,可以通过指针的操作来实现节点的访问和处理,具有较高的灵活性和可扩展性。

哈夫曼编码集和定长编码集构成的二叉树

哈夫曼编码集和定长编码集构成的二叉树

哈夫曼编码集和定长编码集构成的二叉树在信息论和计算机科学中,哈夫曼编码集和定长编码集构成的二叉树是一个非常重要的概念。

它们是用来表示和压缩数据的有效方法,也被广泛应用在数据传输和存储中。

理解这个概念对于深入研究数据处理和编码技术至关重要。

在本文中,我将对哈夫曼编码集和定长编码集构成的二叉树进行深度和广度的探讨,以便读者能更全面地理解这一概念。

1. 哈夫曼编码集和定长编码集的概念解释哈夫曼编码集和定长编码集是两种不同的编码方法,用于将数据进行压缩或表示。

定长编码集是一种固定长度的编码方式,例如每个字符都用8位二进制数表示。

而哈夫曼编码集是一种根据数据的出现频率来动态分配编码长度的方法,出现频率高的字符使用较短的编码,出现频率低的字符使用较长的编码。

哈夫曼编码集通常能够更有效地压缩数据,因为它充分利用了数据的统计特性。

2. 哈夫曼编码集和定长编码集构成的二叉树哈夫曼编码集和定长编码集构成的二叉树是通过将编码集中的每个字符构建成一个叶节点,然后根据编码长度和频率构建一棵二叉树。

在这棵二叉树中,出现频率高的字符对应的叶节点距离根节点较近,而出现频率低的字符对应的叶节点距离根节点较远。

这样就能够根据字符的编码快速地找到对应的二进制表示,从而实现高效的数据压缩和传输。

3. 深入探讨哈夫曼编码集和定长编码集构成的二叉树哈夫曼编码集和定长编码集构成的二叉树在数据压缩和编码领域有着广泛的应用。

它不仅能够有效地压缩数据,还能够提高数据传输和存储的效率。

通过深入研究这一概念,我们能够更全面地了解数据压缩的原理和方法,从而更好地应用于实际场景中。

4. 个人观点和理解对于哈夫曼编码集和定长编码集构成的二叉树,我认为它是一种非常高效且优雅的数据表示和压缩方法。

它通过合理地利用数据的统计特性,能够在不损失数据准确性的前提下大大减小数据的存储和传输开销。

在实际应用中,我们可以根据数据的特点选择合适的编码方式,以达到最佳的压缩效果。

数据结构之二叉树(BinaryTree)

数据结构之二叉树(BinaryTree)

数据结构之⼆叉树(BinaryTree)⽬录导读 ⼆叉树是⼀种很常见的数据结构,但要注意的是,⼆叉树并不是树的特殊情况,⼆叉树与树是两种不⼀样的数据结构。

⽬录 ⼀、⼆叉树的定义 ⼆、⼆叉树为何不是特殊的树 三、⼆叉树的五种基本形态 四、⼆叉树相关术语 五、⼆叉树的主要性质(6个) 六、⼆叉树的存储结构(2种) 七、⼆叉树的遍历算法(4种) ⼋、⼆叉树的基本应⽤:⼆叉排序树、平衡⼆叉树、赫夫曼树及赫夫曼编码⼀、⼆叉树的定义 如果你知道树的定义(有限个结点组成的具有层次关系的集合),那么就很好理解⼆叉树了。

定义:⼆叉树是n(n≥0)个结点的有限集,⼆叉树是每个结点最多有两个⼦树的树结构,它由⼀个根结点及左⼦树和右⼦树组成。

(这⾥的左⼦树和右⼦树也是⼆叉树)。

值得注意的是,⼆叉树和“度⾄多为2的有序树”⼏乎⼀样,但,⼆叉树不是树的特殊情形。

具体分析如下⼆、⼆叉树为何不是特殊的树 1、⼆叉树与⽆序树不同 ⼆叉树的⼦树有左右之分,不能颠倒。

⽆序树的⼦树⽆左右之分。

2、⼆叉树与有序树也不同(关键) 当有序树有两个⼦树时,确实可以看做⼀颗⼆叉树,但当只有⼀个⼦树时,就没有了左右之分,如图所⽰:三、⼆叉树的五种基本状态四、⼆叉树相关术语是满⼆叉树;⽽国际定义为,不存在度为1的结点,即结点的度要么为2要么为0,这样的⼆叉树就称为满⼆叉树。

这两种概念完全不同,既然在国内,我们就默认第⼀种定义就好)。

完全⼆叉树:如果将⼀颗深度为K的⼆叉树按从上到下、从左到右的顺序进⾏编号,如果各结点的编号与深度为K的满⼆叉树相同位置的编号完全对应,那么这就是⼀颗完全⼆叉树。

如图所⽰:五、⼆叉树的主要性质 ⼆叉树的性质是基于它的结构⽽得来的,这些性质不必死记,使⽤到再查询或者⾃⼰根据⼆叉树结构进⾏推理即可。

性质1:⾮空⼆叉树的叶⼦结点数等于双分⽀结点数加1。

证明:设⼆叉树的叶⼦结点数为X,单分⽀结点数为Y,双分⽀结点数为Z。

实现二叉树的各种基本运算的算法

实现二叉树的各种基本运算的算法

实现二叉树的各种基本运算的算法1.二叉树的定义及概述二叉树是一种重要的数据结构,它是由节点组成的序列,每个节点最多有两个子节点。

二叉树的根节点是唯一的,且每个节点都有一个“父节点”,除了根节点外,每个子节点称作“左孩子”和“右孩子”。

二叉树的组成部分是节点,每个节点包括一个数据元素和左右孩子指针。

通过这些指针构成的树形结构,可以便捷地进行数据存储和操作。

本文将介绍二叉树的各种基本运算及实现方法。

2.二叉树的遍历二叉树的遍历分为三种:前序遍历、中序遍历和后序遍历。

前序遍历:按照“根节点-左孩子-右孩子”的顺序遍历二叉树。

中序遍历:按照“左孩子-根节点-右孩子”的顺序遍历二叉树。

后序遍历:按照“左孩子-右孩子-根节点”的顺序遍历二叉树。

3.二叉树的建立二叉树的建立有三种方法:链式存储法、顺序存储法和扩展二叉树。

链式存储法:链式存储法是用链表来表示二叉树的方法,每个节点包括数据域和左右孩子指针域。

链式存储法建立二叉树比较容易,操作起来也比较方便。

顺序存储法:顺序存储法是用数组来表示二叉树的方法,便于存取、操作和查找。

但是顺序存储法的空间利用率不高,只有满二叉树才能利用完全。

扩展二叉树:是指二叉树中所有的空节点都必须存储起来,以构成一颗可以存储不满的二叉树。

由于扩展二叉树浪费了大量的空间,因此很少使用。

4.二叉树的查找二叉树的查找分为两种:层序遍历和二叉排序树的查找。

层序遍历:是一种广度优先搜索的方式来遍历二叉树。

层序遍历可以找到二叉树中从根节点到任意节点的路径,具有较高的效率。

层序遍历可以使用队列来实现。

二叉排序树的查找:是指在一颗二叉排序树中查找某个元素的算法。

二叉排序树(BST)是一颗二叉树,其中每个节点的值都比它的左子节点大,比它的右子节点小。

通过对BST的查找操作,可以将查找的效率高效地进行。

5.二叉树的删除在二叉树中删除节点有两种情况:删除叶子节点和删除非叶子节点。

下面给出二叉树的删除基本操作。

二叉链表法

二叉链表法

二叉链表法二叉链表法是一种常用的二叉树存储结构。

在二叉链表法中,每个节点包含三个信息:数据、左子树指针和右子树指针。

通过将二叉树的每个节点用一个指针连接起来,可以方便地对二叉树进行遍历、查找和修改操作。

二叉链表法的定义如下:```pythonclass Node:def __init__(self, data):self.data = dataself.left = Noneself.right = Noneclass BinaryTree:def __init__(self, root):self.root = root```在二叉链表法中,root指向根节点。

每个节点通过left指针和right指针分别指向左子树和右子树。

叶子节点的left和right 指针都为空。

通过二叉链表法,可以轻松地实现二叉树的遍历算法。

其中包括先序遍历、中序遍历和后序遍历。

以下是这三种遍历算法的详细说明:1. 先序遍历:先访问根节点,然后按照先序遍历的顺序递归地遍历左子树和右子树。

先序遍历可以用递归方式实现,也可以使用栈进行迭代实现。

```pythondef preorder(node):if node is None:returnprint(node.data, end=" ")preorder(node.left)preorder(node.right)```2. 中序遍历:先按照中序遍历的顺序递归地遍历左子树,然后访问根节点,最后递归地遍历右子树。

中序遍历同样可以用递归方式实现,也可以使用栈进行迭代实现。

中序遍历的结果是按照节点值的大小升序排列的。

```pythondef inorder(node):if node is None:returninorder(node.left)print(node.data, end=" ")inorder(node.right)```3. 后序遍历:先按照后序遍历的顺序递归地遍历左子树和右子树,然后访问根节点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用二叉树实现存储信息用二叉树实现存储信息.txt老子忽悠孩子叫教育,孩子忽悠老子叫欺骗,互相忽悠叫代沟。

▲ 男人这花花世界,我要用什么颜色来吸引你。

#in elude <iostream>#inelude <stdlib.h>using n amespaee std;typedef struct _stude nt{int id;ehar[20] Name;Int Age ;int Math;//(数学成绩)};//学生结构体struct treeitem{struct treeitem *lchild;struct treeitem *rchild;struct _stude nt mystude nt;};//二叉树结构体class Stude nt{public:Stude nt(void);~Stude nt(void);void Create(struct treeitem *Tnode );//创建void Find(struct treeitem *tree,int i);//查看节点是否存在void Search(Stude nt &tree);〃查询节点void Chan ge(struct treeitem *Tno de,i nt i);// 修改void DeleteNode(struct treeitem *tree,int i);//删除Stude nt *n ode;// 根节点private:bool tj;int i_id,i_age,i_math;char c_ch;};.cpp=== Stude nt::Stude nt(void){tj=false;}Student::~Stude nt(void){}void Stude nt::Create(struct treeitem *Tnode)// 创建 1{ci n>>i」d,c_ch,i_age,i_math;if(id!=null&&ch!="&&age!=null&&math!=null){struct _stude nt *Ts;Ts->id=i」d;Ts->Name=c_ch;Ts->Age=i_age;Ts->Math=i_math;Tno de=(struct treeitem*)malloc(sizeof(structtreeitem));Tno de->mystude nt=Ts;Create(T no de->lchild); // 生成左子树Create(T no de->rchild); // 生成右子树cout«"Create Complated!"«e ndl;}else{Tn ode=NULL; cout<v"No Create Complated!"<<e ndl;}void Bin STree::Fi nd(struct treeitem*tree,i nt i)// 查找{if(tree!=NULL){if(tree->id==i){tj=true;return;}if(tree->lchild匸NULL){f(tree->lchild->id == i){tj=true;return;}} if(tree->rchild!=NULL){f(tree->rchild->id == i){tj=true;return;Fin d(tree->lchild,i);Fin d(tree->rchild,i);}void Student::Search(Student &tree){if(tree!NULL){if(tree->lchild->lchild==NULL&&tree->lc hild->rchild==NULL){retur n tree->lchild;}elsef(tree->rchild->lchild==NULL&&tree->rchi d->rchild==NULL) {return tree->rchild; returnSearch(tree->lchild); returnSearch(tree->rchild);}void Stude nt::Change(structtreeitem *Tnode, int i){Find (Tnode, i );if(!tj){coutvv"无此节点!"<<endl;}else{ci n> >i_age,i_math,c_ch;Tno de->mystude nt.Age=i_age;Tno de->mystude =c_ch;Tno de->mystude nt.Math=i_math;}void Stude nt::DeleteNode(struct*tree,i nt i){Fin d(tree,i);if(!tj){cout«"无点!"<<e ndl;return;}if(tree!=NULL){if(no de->id== i)//的正好是根节点{f(no de->lchild == NULL && node->rchild NULL)//只有一个根节点的情况{delete node; treeitem要删除node=NULL;coutvv"已删除节点,当前树为空"<<endl;return;}elseif(no de->lchild != NULL && node->rchild ==NULL)//有左孩子没右孩子{treeitem *p = no de;treeitem *dnew treeitem(Search( no de)->id);d->lchild = tree->lchild;d->rchild = NULL;node=d;delete p;cout«"ID 值为"vvivv"的节点已"<<e ndl;}elseif(n ode->rchild != NULL && node->lchild : NULL)//有右孩子没左孩子{treeitem *p = no de;treeitem *dtreeitem(Search( no de)->c onten ts);d->lchild= NULL;d->rchild = tree->rchild;node =d;被删除newdelete p;cout«"ID值为"vvivv"的节"vve ndl;}else//有左、右孩子{treeitem *p = no de;treeitem *d treeitem(Search( no de)->id);d->lchild = tree->lchild;d->child = tree->rchild;node 点已被删除new=d;cout«"ID 值为"vvivv"的节点已被删除"<<e ndl;}}if(tree->lchild!=NULL)〃左孩子,且正是要查找的{if(tree->lchild->id == i)//子是要查找的{if(tree->lchild->lchildtree->lchild->rchild != NULL){ treeitem *p = tree->lchild;不是根节点,树还有若根节点的左孩== NULL &&cout«"ID 值为"vvivv"的节点已被删除"<<e ndl;} elsef(tree->lchild->lchild tree->lchild->rchildNULL && == NULL) delete tree->lchild;tree->lchild = NULL;cout«"ID值为"vvivv"的节点已被删除"<<e ndl;}elsef(tree->lchild->lchild != NULL &&tree->lchild->rchild == NULL){treeitem *p = tree->lchild;tree->lchild = tree->lchild->lchild;delete p;cout«"ID值为"vvivv"的节点已被删除"<<e ndl;}elseif(tree->lchild->lchild != NULL &&tree->lchild->rchild != NULL){treeitem *p = tree->lchild;treeitem *d = new treeitem(Search( no de)->id);d->left = tree->lchildt->lchild;tree->lchild = d;delete p;return;f(tree->rchild->id == i){f(tree->rchild->lchild tree->rchild->rchild == NULL){f(tree->rchild 匸NULL)// 右孩子,且正是要查找的{不是根节点,树还有 NULL &&tree->rchild = NULL;cout«"ID值为"vvivv"的节点已被删除"vve ndl;}elsef(tree->rchild->lchild != NULL && tree->rchild->rchild == NULL){treeitem *p = tree->rchild;tree->rchild = tree->rchild->lchild;delete p;cout<<"ID 值为"vvivv"的节点已被删除'<<e ndl;}elseif(tree->rchild->child == NULL && tree->rchild->rchild != NULL)treeitem *p = tree->rchild;tree->rchild = tree->rchild->rchild; delete p;cout«"ID 值为"vvivv"的节点已被删除"<<e ndl;}elseif(tree->rchild->lchildtree->rchild->rchild != NULL){ treeitem *p = tree->rchild; treeitem(Search( no de)->id);d->lchild = tree->rchild->lchild; != NULL &&treeitem *d newd->rchild = tree->rchild->rchild;tree->rchild = d;delete p;}retur n;}}继续根节点的DeleteNode(tree->lchild,i);〃左孩子,进行递归算法。

相关文档
最新文档