数据结构-树的相关问题

举报
芒果_Mango 发表于 2022/02/26 21:35:59 2022/02/26
【摘要】 问:子树是否可以有交集==注意:树形结构中,子树之间不能有交集,否则就不是树形结构==子树不相交除了根结点,每个结点有且仅有一个父节点一个N个结点的树有N-1条边 树的表示方法: 假设说明树的度为N->最大的节点的度为Nstruct TreeNode{ int data; struct TreeNode* subs[N];};//subs是指针数组,是数组存在的问题: 1...

问:子树是否可以有交集

==注意:树形结构中,子树之间不能有交集,否则就不是树形结构==

  • 子树不相交
  • 除了根结点,每个结点有且仅有一个父节点
  • 一个N个结点的树有N-1条边

树的表示方法:

假设说明树的度为N->最大的节点的度为N
struct TreeNode
{
    int data;
    struct TreeNode* subs[N];
};
//subs是指针数组,是数组
存在的问题:
    1.可能会存在不少空间浪费 ->如果最大的度为N 其它都为012.. N 会存在不少空间的浪费
    2.万一没有限定树的度为多少呢?

未知树的度->使用顺序表
typedef struct TreeNode* SLDataTye;//存放的数据是二叉树结构体
struct TreeNode
{
    int data;
    SeqList s; //s是顺序表结构体里面含一个指针,SLDataType* a ->a是一个数组,SLDataType展开后,a是二级指针,a指向的是存放一级指针SLDataType的数组
};
 使用顺序表,如果空间不够就可以扩容

双亲表示法
struct TreeNode
{
    int parent;//存父亲结点的下标
    int data;//存该结点的数据
};
struct TreeNode arr[10]//arr是结构体数组
    
用数组存放父亲结点的下标

在这里插入图片描述

三叉链

// 三叉链
typedef int BTDataType;
struct BinaryTreeNode
{
    struct BinTreeNode* _pParent; // 指向当前节点的双亲
    struct BinTreeNode* _pLeft; // 指向当前节点左孩子
    struct BinTreeNode* _pRight; // 指向当前节点右孩子
    BTDataType _data; // 当前节点值域
}

最优表示方法:左孩子右兄弟表示法
typedef int DataType;
struct Node
{
    struct Node* firstChil; // 永远指向它的第一个孩子结点
    struct Node* NextBrother; // 指向孩子右边的兄弟
    DataType data; // 结点中的数据域
};

在这里插入图片描述


在这里插入图片描述


如何通过这个方法找到结点的孩子:

通过fristchirld找到第一个孩子,通过第一个孩子的Nextbrother,不断找下一个NextBrother,当Nextbrother为NULL时结束


经典的树形结构:文件系统

在这里插入图片描述


前序后序中序配合构成树 :结论

前序+中序 可以重建树

后序+中序 可以重建树

前序+后序 不可以重建树

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。