数据结构 笔记:树的定义与操作

本文详细介绍了树这种非线性数据结构的基本概念,包括树的定义、结点的度、叶结点与分支结点的区别、树的度的计算,以及树的有序性。此外,还讨论了森林的概念,并列举了树的一些基本操作,如插入、删除、查找、获取高度和度等。树在程序中被表示为特殊的数据类型,其结点同样具有特定的数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

树是一种非线性的数据结构

树是由n(n>=0)个结点组成的有限集合

-如果 n = 0,成为空树;

-如果n > 0,则:

·有一个特定的称之为根(root)的结点

·根据点只有直接后继,但没有直接前驱

·除根以外的其他结点划分为m(m>=0)个互补相交的有限集合T0,T1,...,Tm-1,

每个集合又是一棵树,并称之为根的子树(sub tree)

树中度的概念

-树的结点包含一个数据及若干指向子树的分支

-结点拥有的子树数目称为结点的度

·度为0的结点成为叶结点

·度不为0的结点成为分支结点

-树的度定义为所有结点中度的最大值

树中的前驱和后继

-结点的直接后继称为该结点的孩子

·相应的,该结点称为孩子的双亲

-结点的孩子的孩子的.......称为该结点的子孙

·相应的,该结点称为子孙的祖先

-同一个双亲的孩子之间互称兄弟

树中结点的层次

树的有序性

-如果树中结点的各个树从左向右是有次序的,子树间不能互换位置,则称该树为有序树,负责为无序树。

森林的概念

-森林是由n(n>=0)颗互不相交的树组成的结合

树的一些常用操作

-将元素插入树中

-将元素从树中删除

-获取树的结点树

-获取树的高度

-获取树的度

-清空树中的元素

-。。。

树在程序中表现为一种特殊的数据类型

template <typename T>
class Tree : public Object
{
protected:
    TreeNode<T>* m_root;
public:
    Tree() {m_root = NULL ;}
    virtual bool insert(TreeNode<T>* node) = 0;
    virtual bool insert(const T& value,TreeNode<T>* parent) = 0;
    virtual SharedPointer<Tree<T>>remove(const T& value) = 0;
    virtual SharedPointer<Tree<T>>remove(TreeNode<T>* node) = 0;
    virtual TreeNode<T>* find(const T& value) const = 0;
    virtual TreeNode<T>* find(TreeNode<T>* node)const = 0;
    virtual TreeNode<T>* root() const = 0;
    virtual int degree() const = 0;
    virtual int count() const = 0;
    virtual int height() const = 0;
    virtual void clear() = 0;
};

树中结点也表现为一种特殊的数据类型

template<typename T>
class TreeNode : public Object
{
public:
    T value;
    TreeNode<T>* parent;

    TreeNode()
    {
        parent = NULL;
    }

    virtual ~TreeNode() = 0;
};

总结:

-树是一种非线性的数据结构

-结点拥有唯一的前驱(父结点)和若干后继(子结点)

-树的结点包含一个数据及若干指其他结点的指针

-树与结点在程序中表现为特殊的数据类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值