数据结构——第三章树和二叉树:01树和二叉树的类型定义

1.树的类型定义:

(1)数据对象D:D是具有相同特性的数据元素的集合。

(2)数据关系R:若D为空集,则成为空树

否则:在D中存在唯一的称为根的数据元素root。当n>1时,其余结点可分为n(n>0)个互不相交的有限集T1, T2, T3, ..., Tm,其中每一棵子集本身又是一课符合本定义的树,称为根root的子树。

2.树的基本操作:

(1)查找类:

①Root(T):求树的根结点

②Value(T, cur_e):求当前结点的元素值

③Parent(T, cur_e):求当前结点的双亲结点

④LeftChile(T, cur_e):求当前结点的最左孩子

⑤RightSibling(T, cur_e):求当前结点的右兄弟

⑥TreeEmpty(T):判定树是否为空树

⑦TreeDepth(T):求树的深度

⑧TraverseTree(T, Visit()):遍历树

(2)插入类:

①InitTree(&T):初始化树

②CreateTree(&T, definition):按定义构造树

③Assign(&T, cur_e, value):给当前结点赋值

④InsertChild(&T, &p, i, root):将以root为根的树插入为结点p的第i棵子树

(3)删除类:

①ClearTree(&T):将树清空

②DestroyTree(&T):销毁树的结构

③DeleteChile(&T, &p, i):删除结点p的第i棵子树

3.有向树:有确定的根,树根和子树根之间为有向关系。

4.有序树:子树之间存在确定的次序关系。

5.无序树:子树之间不存在确定的次序关系。

6.线性结构对比树形结构:

(1)线性结构:第一个元素无前驱,最后一个元素无后继,其它元素一个前驱一个后继

(2)树形结构:根结点无前驱,多个叶子结点无后继,其它元素一个前驱多个后继

7.

原文地址:https://www.cnblogs.com/hou36/p/9899018.html

时间: 2024-10-27 16:03:51

数据结构——第三章树和二叉树:01树和二叉树的类型定义的相关文章

数据结构——第三章树和二叉树:03树和森林

1.树的三种存储结构: (1)双亲表示法: #define MAX_TREE_SIZE 100 结点结构: typedef struct PTNode { Elem data; int parent; //双亲位置域 } PTNode; (2)孩子双亲链表表示法: typedef struct PTNode { Elem data; int parent; //双亲位置域 struct CTNode* nextchild; } *ChildPtr; (3)树的二叉链表(孩子-兄弟)存储表示法:

数据结构(三十九)多路查找树(B树)

一.多路查找树的背景 前面所讨论的查找算法都是在内存中进行的,它们适用于较小的文件,而对于较大的.存放在外存储器上的文件就不合适了,对于此类大规模的文件,即使是采用了平衡二叉树,在查找效率上仍然较低. 如果要操作的数据集非常大,大到内存已经没办法处理了,这种情况下,对数据的处理需要不断从硬盘等存储设备中调入或调出内存页面.一旦涉及到这样的外部设备,关于时间复杂度的计算就会发生变化,访问该集合元素的时间已经不仅仅是寻找该元素所需比较次数的函数,必须考虑对硬盘等外部存储设备的访问时间以及将会对该设备

数据结构——第三章树和二叉树:02二叉树

1.二叉树的存储结构: (1)二叉树的顺序存储表示: #define MAX_TREE_SIZE 100 //二叉树的最大结点数 typedef TElemType SqBiTree[MAX_TREE_SIZE]; SqBiTree bt; (2)二叉树的链式存储表示: ①二叉链表: typedef struct BiTNode //结点结构 { TElemType data; struct BiTNode *lchild, *rchild; //左右孩子指针 } BiTNode, *BiTre

剑指offer-第三章高质量代码(树的子结构)

题目:输入两个二叉树A和B,判断B是不是A的子结构. 思路:遍历A树找到B树的根节点,然后再判断左右子树是否相同.不相同再往下找.重复改过程. 子结构的描述如下图所示: C++代码: #include<iostream> using namespace std; struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; }; BinaryTreeNode* Construct

C语言数据结构——第三章 栈和队列

三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性的数据结构. 从数据类型的角度看,它们是和线性表大不相同的两种重要的抽象数据类型,在面向对象的程序设计中,它们是多型数据类型. 3.1-栈 3.1.1-抽象数据类型栈的定义 栈:是限定仅在表尾进行插入或删除操作的线性表,又可以称为后进先出的线性表. 栈顶:栈的表尾端 栈底:栈的表头端 空栈:不含元素

【自考】数据结构第三章,队列,期末不挂科指南,第4篇

队列 这篇博客主要介绍一下队列的概念,并且采用C语言,编写两种存储实现方式:顺序存储和链式存储,当然还有常规的队列基本操作的实现算法 队列基本概念 标准解释:队列(Queue)是有限个同类型数据元素的线性序列,是一种先进先出(First In First Out FIFO)的线性表,新键入的数据元素插在队列尾端,出队列的数据元素在队列首部被删除. 教材中给了一个示意图,不错 顺序队列结构类型中有三个域:data.front.rear. data:一维数组,存储队列中的数据元素 font:指向队列

【自考】数据结构第三章,数组,期末不挂科指南,第5篇

数组 概念如下 数组可以看成线性表的一种推广,其实就是一种线性表,一维数组又称为向量 数据由一组具有相同类型的数据元素组成,并存储在一组连续的存储单元中 若一维数组中的数据元素又是一维数组结构,则称为二维数组 依次类推,可以得到 三维数组和多维数组 数组基本运算 数组通常只有两种基本运算 读:给定一组下标,返回该位置的元素内容 写:给定一组下标,修改该位置的元素内容 数组的存储结构 一维数组元素的内存单元地址是连续的 二维数组可有两种存储方法:一种是以列序为主序的存储:另一种是以行序为主序的存储

数据结构——第三章 栈

先入后出 1.栈的进出问题(题目一般只说入栈顺序,而没说啥时候出来) 2.逆波兰式(栈的后缀表示,从中缀转后缀) 例: (a+b)*3 +2 运算符在两个操作数中间,为中缀表达式 因为电脑太笨,所以需要将中缀表达式转换成后缀表达式,利用栈进行计算. 算法: 如何将中缀表达式转换成后缀表达式? 1.按执行的先后顺序,给表达式全部加上括号 2.把所有运算符移到右括号的后面 3.把所有的括号删除 例: a/b^c+d*e-a*c 1.这个式子需要这样计算 (((a/(b^c))+(d*e) )-(a*

【自考】数据结构第三章,栈、队列、数组,期末不挂科指南,第3篇

学习目标 自考重点.期末考试必过指南,这篇文章让你理解什么是栈.什么是队列.什么是数组 掌握栈.队列的顺序存储结构和链式存储结构 掌握栈.队列的基本操作在顺序存储结构和链式存储结构上的实现 掌握矩阵的压缩存储 今天核心咱们先把栈搞清楚 栈和队列可以看做是特殊的线性表 .它们的特殊性表现在它们的基本运算是线性表运算的子集,它们是运算受限的线性表 栈 栈(Stack)是运算受限的线性表,这种线性表上的插入和删除操作限定在表的一端进行 基本概念 栈顶:允许插入和删除的一端 栈尾:另一端 空栈:不含任何