数据结构——树的集合

二叉搜索树:搜索性能优秀

binary search tree是一个空树,或者具有以下性质的二叉树,对于树中的每个节点,x。它的左子树中所有关键字的值都小于x的关键字的值,而它的右子树树中的关键字值都大于x的关键字的值。

通常使用二叉链表作为其存储结构。

对其进行中序遍历,可以得到一个关键字有序的序列。因此,对于一个无序序列,可以通过构造一棵二叉搜索树变成一个有序序列,构造树的过程即为对无序序列排序的过程。插入的新的节点都是在叶子节点上,插入的时候,不会移动其它节点,只要改变某个节点的指针,由空变为非空即可。

搜索,插入,删除复杂度等于树高,即O(log(n))

平衡二叉树:

定义:是一颗空树或者左右两个子树高度绝对值不超过1,且左右两颗子树也都是平衡二叉树

给定一下数据结构:判断两个树是否相等。相等返回0,否则返回其它值。

typdef struct TreeNode{
    char c;
    TreeNode *leftchild;
    TreeNode *rightchild;
}
int compareTree(TreeNode *tree1,TreeNode *tree2){
    bool isTree1Null=(tree1==NULL);
    bool isTree2Null=(tree2==NULL);
    if(isTree1Null!=isTree2Null) return 1;
   if(isTree1Null && isTree2Null) return 0;
   if(tree1->c != tree2->c) return 1;
   return compareTree(tree1->left,tree2->left) && compare(tree1->right,tree2->right);
}

 

比较两个数

红黑二叉树:

普通树转化二叉树记忆技巧:左孩子右兄弟。

查找二叉树:

记忆:左边子树节点(数字)< 父节点 > 右边子树节点(数字)

涉及查找动作,插入动作,删除动作。

哈弗曼树:

路径:也就是线条(1个线条就是1个路径)

权:也就是叶子节点的数字

带权路径长度:路径*权,比如 节点8的为:8*3=24

树的带权路径长度:所有带权路径长度的值相加。哈夫曼树是一种带权路径长度最短的。上面左边41,右边25,哈弗曼是最优的。

构造哈夫曼:比如我们有一组权值{5,29,7,8,14,23,3,11}:

哈夫曼树也是二叉树,所以也是按照二叉树的规则,左小右大。

继续一个一个把这些权值添加到这两颗树上面,从小到大的“堆积”起来,最后形成的大树。看图:

 

平衡二叉树:对任意一个节点,左右子树深度不超过1. 保持平衡。

LL型平衡旋转:目的就是把普通二叉树给转化成平衡树。

原来是LL ,也就是通过右旋转处理。

RR型通过左旋转处理。

从上面的两个旋转来看,主要是把中间的那个节点作为根结点,然后另外两个结点分别作为左、右子树,就能达到目的。

红黑二叉树:

红-黑二叉树首先是一颗二叉树,它具有二叉树的所有性质,是一种平衡二叉树。

 

转载于:https://www.cnblogs.com/ct6816678/p/3688983.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值