首页 > 其他分享 >数据结构之树(Tree)(一)

数据结构之树(Tree)(一)

时间:2024-08-24 09:51:29浏览次数:8  
标签:BstNode Tree rootPrt 之树 二叉树 return 数据结构 data 节点

数据结构之树(Tree)(一)


文章目录


一、什么是树?

在计算机科学中,树是一种常用的数据结构,用来模拟具有层次关系的数据集合。它由节点(nodes)组成,这些节点通过边(edges)连接在一起。树结构中没有循环,并且除了根节点外,每个节点有且仅有一个父节点。
树

1、有关树的基本概念和术语

  • 节点 (Node):树中的一个元素,可以包含一些数据以及指向其子节点的引用。
  • 根 (Root):树的最顶端节点,没有父节点。
  • 叶子 (Leaf):没有任何子节点的节点。
  • 父节点 (Parent):直接位于某个节点之上的节点。
  • 子节点 (Child):直接位于某个节点之下的节点。
  • 兄弟节点 (Siblings):拥有同一个父节点的节点。
  • 路径 (Path):从树的一个节点到另一个节点的序列。
  • 深度 (Deepth):从根节点到特定节点的路径长度。
  • 高度 (Height):树中从根节点到最远叶子节点的最长路径长度。

2、树的类型(二叉树)

我们这里只讨论二叉树 (Binary Tree),即每个节点最多有两个子节点的树。

  • 满二叉树 (Full Binary Tree):每个节点都有两个子节点或没有子节点。
  • 完全二叉树 (Complete Binary Tree):除了最后一层外,每一层都是满的;最后一层的所有节点都尽可能地集中在左边。
  • 平衡二叉树 (Balanced Binary Tree):任何两个叶子节点的高度差不超过1。
  • 二叉搜索树 (Binary Search Tree, BST):左子树中的所有节点值小于其父节点值,右子树中的所有节点值大于其父节点值。
    二叉搜索树

二、二叉树的实现

1、构建一个二叉树节点

一个基本的二叉树节点包含以下三个属性:

  • 数据(Data):节点所包含的数据。
  • 左子节点 (left):指向该节点的左子节点的引用。
  • 右子节点 (right):指向该节点的右子节点的引用。
    二叉树

下面是一个简单的C++结构体实现树节点:

struct BstNode{
    int data;
    BstNode* left;
    BstNode* right;
};

2、插入(Insert)操作

在二叉树中进行插入操作通常取决于二叉树的具体类型。对于一般的二叉树,插入操作比较灵活,可以自由地选择将新节点放在任何位置。但是,对于某些特殊的二叉树,如二叉搜索树(BST),插入操作必须遵循特定的规则。
二叉搜索树(BST)是一种特殊的二叉树,其中每个节点的值都大于其左子树中的所有节点的值,并且小于其右子树中的所有节点的值。因此,在二叉搜索树中插入新节点时,需要确保新节点满足这一性质。
以下是二叉搜索树(BST)的插入的代码:

BstNode* GetNewNode(int data){
    BstNode* newNode = new BstNode();
    newNode->data = data;
    newNode->left = newNode->right = NULL;
    return newNode;
}
BstNode* Insert(BstNode* rootPrt,int data){
    if(rootPrt == NULL){//先判断是否有树
        rootPrt = GetNewNode(data);
        return rootPrt;
    }
    else if(data <= rootPrt->data){
        rootPrt->left = Insert(rootPrt->left,data);
    }
    else{
        rootPrt->right = Insert(rootPrt->right,data);
    }
    return rootPrt;//每次返回根节点
}
int main() {
    BstNode* rootPrt = NULL;
    rootPrt = Insert(rootPrt,7);
    rootPrt = Insert(rootPrt,5);
}

3、搜索(Search)操作

因为二叉搜索树的特殊性,我们在二叉树中搜索一个数据的时候,可以选择二分法进行搜索,比如,如果你想找最小的数值,那就一直往树的左下方搜就可以,如果要找最大值,就往树的右下方搜索。

bool Search(BstNode* rootPrt,int data){// 判断某个值是不是在树中
    if(rootPrt == NULL) return false;
    else if(rootPrt->data == data) return true;
    else if(data <= rootPrt->data) return Search(rootPrt->left,data);
    else return Search(rootPrt->right,data);
}
int Findmin(BstNode* rootPrt){//寻找最小值
    if(rootPrt == NULL){
        cout<<"Empty Tree"<<endl;
        return -1;
    }
    BstNode* curr = rootPrt;
    while(curr->left!=NULL) {
        curr = curr->left;
    }
    return curr->data;
}
int Findmax(BstNode* rootPrt){
    if(rootPrt == NULL){
        cout<<"Empty Tree"<<endl;
        return -1;
    }
    BstNode* curr = rootPrt;
    while(curr->right!=NULL) {
        curr = curr->right;
    }
    return curr->data;
}

标签:BstNode,Tree,rootPrt,之树,二叉树,return,数据结构,data,节点
From: https://blog.csdn.net/weixin_74772510/article/details/141474511

相关文章

  • 数据结构
    还是决定单独拎出来写...线段树好像自己从来没写过动态开点(?)动态开点顾名思义,动态的开线段树上的节点,以达到节省空间的目的,这种技巧我们常用在普通线段树无法开下/值域过大时可以使用,动态开点线段树上的区间修改需要用到标记永久化,当然标记需要满足结合律和交换律,互相覆盖的标......
  • 数据结构day04(队列 Queue 循环队列、链式队列)
    目录【1】队列Queue1》队列的定义 2》循环队列3》链式队列 【1】队列Queue1》队列的定义队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(FirstInFirstOut)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端......
  • 【数据结构】总结二叉树的概念以及存储结构
    目录1.树的概念及结构1.1树的名词定义1.2树的表示2.二叉树的概念及结构 2.1二叉树的概念2.2特殊的二叉树2.2.1满二叉树2.2.2完全二叉树2.3 二叉树的存储结构2.3.1顺序存储2.3.2链式存储3.选择题1.树的概念及结构1.1树的名词定义1.节点的度:......
  • 【数据结构】【模板】笛卡尔树
    笛卡尔树定义笛卡尔树每个节点有两种属性,一种是键值,一种是优先级。一般将位置作为键值,维护BST的性质,这样其中序遍历一定为\(1~n\)。一般将数值看作优先级,维护堆的性质。构建思路维护一个单调栈,表示现在的右链长度。我们将数组从前往后插入笛卡尔树。对于第\(i\)个......
  • 数据结构-时间、空间复杂度-详解
    数据结构-时间复杂度-详解1.前言1.1数据结构与算法1.2如何衡量一个算法的好坏1.3复杂度2.时间复杂度2.1是什么2.2大O符号只保留最高阶项不带系数常数次为`O(1)`2.3示例示例2.1示例2.2示例2.3示例2.42.4题目3.空间复杂度3.1是什么3.2大O符号3.3示例示例1示例2示例3示......
  • 数据结构--链表(单向链表--有头链表、无头链表)链表的插入、删除、修改、查找
    什么是链表?链表是一种基本的数据结构,用于存储一组数据元素。与数组不同,链表的元素在内存中并不连续存储。链表由一系列节点组成,每个节点包含以下两个主要部分:1.数据部分:存储节点所包含的数据。2.指针部分:存储指向下一个节点的指针(对于单向链表),或者存储指向前一个节点和下......
  • 数据结构之链表(看不懂你来找我)
    数据结构......
  • 知识改变命运 数据结构 【二叉树】
    1.树型结构(了解)1.1概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:有一个特殊的结点,称为根结点,根结点没有前驱结点除根结点外,其余结点被分成M......
  • 金蝶云星空元数据冲突SVN:replaced,tree conflict树冲突解决过程
    问题截图: 解决方式:      ......
  • 算法与数据结构——基本数据类型与编码
    基本数据类型基本数据类型是计算机CPU可以直接进行运算的类型,在算法中直接被使用,主要包括以下几种整数类型byte、short、int、long。浮点数类型float、double,用于表示小数字符类型char,用于表示各种语言的字母、标点符号甚至表情符号等。布尔类型bool,用于表示“是”与“否”......