树知识点汇总

算法动态展示网站
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
树中任意节点具有孩子的数目,成为
节点含孩子数目无限制的树成为广义树, general tree。
树的平衡
对于一棵树,如果树的所有叶子都位于同一层或者相差不超过一层。
完全树
树是平衡的,且底层所有叶子都位于树的左边,认为树是完全的。
满树
如果n元树所有的叶子都位于同一层且每个结点要么是叶子结点要么具有n个孩子,则称此树是满的。
一般而言,含有m个元素的平衡n元树高度为lognm.

遍历

前序
中序
后序
层序:创建结点队列,创建结果list,将根节点入队列,while(节点队列不为空){
节点队列出队,当节点不为空,加入list,并将节点子女入队列,否则,加入空到结果列表中。
}

对于表达式树

递归

public int evaluate(BinaryTreenode root){
int result, op1, op2;
if(root==null)
{
	result=0;
}
else{
	ExpressionTreeOp result=root.getElement();
	if(result.isOperator())
	{
	op1=evaluate(root.getLeft());
	op2=evaluate(root.getRight());
	result=Comput(temp.getOperator,op1,op2);
	}
else{
	result=temp.getValue();
}
	return result;
}
}

二叉搜索树

在二叉搜索树中:

   ① 若任意结点的左子树不空,则左子树上所有结点的值均不大于它的根结点的值;

   ② 若任意结点的右子树不空,则右子树上所有结点的值均不小于它的根结点的值;

   ③ 任意结点的左、右子树也分别为二叉搜索树。

插入一个节点
1 看是否为空,为空成为根节点
2. 不为空与根节点比较,比其小,根节点是否有左孩子,没有,插入
3. 根节点有左孩子,递归,新的函数,传入element与根节点的左孩子,继续比较。

二叉搜索树中删除一个元素还不会

标注一下好难啊

AVL树

是由GM Adelson - Velsky和EM Landis于1962年发明的。为了纪念其发明者,这树结构被命名为AVL。
AVL树可以定义为高度平衡二叉搜索树,其中每个节点与平衡因子相关联,该平衡因子通过从其左子树的子树中减去其右子树的高度来计算。
如果每个节点的平衡因子在-1到1之间,则称树是平衡的,否则,树将是不平衡的并且需要平衡。
平衡系数(k)=高度(左(k)) - 高度(右(k))
如果任何节点的平衡因子为1,则意味着左子树比右子树高一级。如果任何节点的平衡因子为0,则意味着左子树和右子树包含相等的高度。如果任何节点的平衡因子是-1,则意味着左子树比右子树低一级。
AVL树如下图所示。
树知识点汇总_第1张图片

堆是一个完全二叉树,其中每一个节点都小雨或等于他的两个孩子
最大堆:节点大于等于左右孩子
最小堆:节点小于等于左右孩子。
addElement: 先添加到最后,再向上与父元素进行兑换。
removeMin:移除

Set

Map

containsKey()
containsValue()
get(key)
put(key,value)

B 树 B+树

2-3查找树
每个节点2个孩子(2节点)或3个孩子(3节点)
2节点要么没有孩子,要么两个孩子,2节点只有一个元素
3节点要么灭有孩子,要么三个孩子,3节点有2个元素,三个孩子分别是小于最小元素,大于最小小于大的,和大于大的
对于这种树
仍然是左小右大。
2-3树插入删除操作,由于时间原因,仅仅只实现了插入操作。
2-3树插入操作,分三类。
1.在头节点插入这个可以直接生成一个二节点容纳就行。
2.插入的是一个二节点直接将二节点升级成为三节点,保留原本的节点连接信息就ok了。
3.插入的是三节点:虽然别人分了很多种情况,但他们都有一个本质,就是如果待插入位置如果是三节点那么就分解它,向上抛掷,如果上面也是三节点,那么仍然需要拆解,向上抛掷,…等到如果抛掷到头节点,如果头节点也是三节点那么说明,这个树高度不够存放这个结构,就需要分解头节点终止操作增加树的高度。因为在往上没有节点可以执行操作。
那好我们假定我们记录的数据是1,2,3,4,5,6,7,8,9不失一般性,就从1开始按顺序插入模拟程序运行。
原文:https://blog.csdn.net/qq_41657315/article/details/80571893

树知识点汇总_第2张图片

F 比e大,且e是一个点,插入,a比b小,先插入,发现是三个点,然后分裂,中间的b上去。



按大小插入,达到3个之后就进行分裂,中间的上去。

** 2-4树**
一个节点包含3个元素(4节点)要么没有孩子要么四个孩子

遍历:
广度优先
深度优先
最小生成树:
prim: 加点法:选择一个点,他周围最小的边对应的点加入,这个点和新加入的点构成新的集合,再选择他们周围最小的边,对应的节点加入。
krustal :加边法:选择最小的边依次加入 ,只要不成环即可。

你可能感兴趣的:(LeetCode)