数据结构——树

数据结构——树

(一)基本概念

  1. 结点为n的树必然有n-1条边
  2. 结点通常存储在数组中、(?)实际上偏向于用链表来实现树
  3. equivalence class 等价类

(二)practice

  1. 树的前后续遍历
  2. 归并查找(路径压缩 )(加权合并规则)

(三)

  • 并查算法UNION/FIND:
    (1)判断两个节点是否在同一集合中
    (2)归并两个集合

Find根节点的函数:

int FIND(int curr){
while(array[curr]!=root)
{ curr=array[curr];}
return curr;
}
  • 使用函数differ 检查一个等价对中的两个元素是否在同一棵树中,是就不需变动
  • 若不在,用UNION函数归并两个等价类

为降低树的高度:

  1. weighted union rule 加权合并规则:把结点较少的一棵树和节点较多的一棵树归并时,把结点较少的根节点指向结点较多的。
  2. path compression 路径压缩:查找一个结点X的根节点时,把根节点设为R,然后顺着X到R的路径把每个节点的父指针域都设置为指向R
//FIND with path compression
int find(int curr){
if(array[curr]==root){return curr;}
array[curr]=find(array[curr]);
return array[curr];
}

(四)树的表示:
(1)parent point表示法(父指针表示):父节点下标、标号(元素值)、结点下标(0-n)
(2)子结点表 表示法:包括:父节点,父节点后从左子节点到右子节点的链表结构
(3)左子结点/右兄弟结点表示法
每个结点存储结点的值,以及指向父节点、最左子节点和右兄弟结点指针

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值