【数据结构】2.树:二叉树、二叉搜索树及其基本实现

本文详细介绍了树的基本概念,包括树的定义、性质和表示方法。接着,重点探讨了二叉树的定义、性质、存储结构及基本操作,如初始化、遍历等。最后,讲解了二叉搜索树的特性,包括插入、查找和删除操作。通过本文,读者将对二叉树和二叉搜索树有深入的认识。
摘要由CSDN通过智能技术生成

一、树概述

1.树定义

树是个结点构成的有限集合。
1)当n=0时,称为空树;
2) 对于任一棵非空树都有一个称为“根(Root)”的结点;其余结点可分为m(m>0)个互不相交的有限集,其中每个集合是原来树的子树。
子树是不相交的;除了根结点外,每个结点有且仅有一个父结点; 一棵N个结点的树有N-1条边。

2.树的一些基本概念

结点的度:结点的子树个数
树的度:树的所有结点中最大的度数
叶结点:度为0的结点
父结点:有子树的结点是其子树的根结点的父结点
子结点:若A结点是B结点的父结点,则称B结点是A结点的子结点;子结点也称孩子结点。
树的深度:树中所有结点中的最大层次是这棵树的深度。

3.表示方法

链表表示方法:

儿子兄弟表示:二叉树

二、二叉树

1.二叉树概念种类

二叉树:一个有穷的结点集合。这个集合可以为空;若不为空,则它是由根结点和称为其左子树TL和右子树TR的
两个不相交的二叉树组成。
二叉树的子树有左右顺序之分。
斜二叉树:只有左儿子或右儿子。
完美二叉树:
在这里插入图片描述

完全二叉树:有n个结点的二叉树,对树中结点按从上至下、从左到右顺序进行编号,编号为i(1 ≤ i ≤ n)结点与满二叉树中编号为 i 结点在二叉树中位置相同。
在这里插入图片描述

2.性质

1)一个二叉树第 i 层的最大结点数为:2 ^ i-1 ,i >=1。深度为k的二叉树有最大结点总数为: 2 ^ k-1,k >=1。
2)对任何非空二叉树,若n0表示叶结点的个数、n2是度为2的非叶结点个数,那么两者满足关系n0
= n2+1。

3.存储结构

非根结点(序号 i > 1)的父结点的序号是 i / 2;
结点(序号为 i )的左孩子结点的序号是 2i,(若2 i <= n,否则没有左孩子);
结点(序号为 i )的右孩子结点的序号是 2i+1,(若2 i +1<= n,否则没有右孩子);
链表存储方式

template <class T>
struct BinTree
{
   
    T Data;
    BinTree *Left;
    BinTree *Right;
};

4.基本操作

1)用数组初始化:

template <class T1, class T2>
BinTree<T1> *CreatTree(T2 a, size_t n, int index)
{
   
    BinTree<T1> *root = nullptr;
    if (index < n && a[index] != 0)
    {
   
        root = new BinTree<T1>;
        root->Data = a[index];
        root->Left = CreatTree<T1, T2>(a, n, ++index);
        root->Right = CreatTree<T1, T2>(a, n, ++index);
    }
    return root;
    cout << endl;
}
//数组初始化
int a[] = {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值