二叉树笔记

  1. 最近刚学习了二叉树,感觉还有点晕乎,进行一个汇总整理,会比较长,还有点多
    二叉树 一、定义:每个结点最多有两个子树的树结构。(左子树,右子树) 二、用法:常用于实现二叉树查找树、二叉堆。 三、类型:
    1.满二叉树:
    (1) 深度为k,有2^k-1个结点。
    (2)每一层的结点数都是最大结点数。
    (3)叶子结点都处在最底层的二叉树。
    2.完全二叉树:
    (1)除最后一层外,若其余层都是满的,并且或者最后一层是满的,或者是在右边缺少连续若干结点。
    (2).若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布
    (3).具有n个结点的完全二叉树的深度为floor(log2n)+1
    (4)深度为k的完全二叉树,至少有2(k-1)个叶子结点,至多有(2k)-1个结点。
    3. 平衡二叉树:又称为AVL树,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 四、性质:
    (1) 在非空二叉树中,第i层的结点总数不超过 2^(n-1) i>=1;
    (2) 深度为h的二叉树最多有2^h-1个结点(h>=1),最少有h个结点;
    (3) 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;
    (4) 具有n个结点的完全二叉树的深度为[log2n]+1([ ]表示向下取整)
    (5)有N个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系:
    1)若I为结点编号则 如果I>1,则其父结点的编号为I/2; 如果2I<=N,则其左孩子(即左子树的根结点)的编号为2I;若2I>N,则无左孩子;
    2)如果2
    I+1<=N,则其右孩子的结点编号为2I+1;若2I+1>N,则无右孩子。
    (6)给定N个结点,能构成h(N)种不同的二叉树。 h(N)为卡特兰数的第N项。h(n)=C(2*n,n)/(n+1)。
    (7)设有i个枝点,I为所有枝点的道路长度总和,J为叶的道路长度总和J=I+2i 四、二叉树遍历
    1.先序遍历DLR:先序遍历的第一个结点是根;前序遍历:根-左-右
    2.中序遍历LDR:已知根结点,根结点左边的值都在根结点的左子树上,根结点右边的值在根节点右子树上;中序遍历:左-根-右
    3.后序遍历LRD: 后序遍历的最后一个结点是根;后序遍历:左-右-根
    4.层序遍历:即按照层次访问,通常用队列来做。访问根,访问子女,再访问子女的子女(越往后的层次越低)(两个子女的级别相同) 二叉排序树:可以为空树,或者是满足以下条件的非空二叉树,
    1.左右子树均是二叉排序树;
    2.左子树的值小于根结点,右子树的值大于根节点 用中序遍历二叉排序树,可以得到一个递增序列。 查找: 输入: 删除:
    1.删除叶子结点:直接删除
    2.结点只有一颗右子树或左子树:将自己的孩子放在自己的位置
    3.结点有既有左子树也有右子树: (1).删除P: p与它直接前驱数据域交换,然后删除它的直接前驱(直接前驱:左子树中第一个比p小的;直接后继:右子树中第一个比p大的; (2).删除p:p
    与它的直接后继数据域交换,然后删除它的直接后继; (3)直至P的直接前驱,直接后继都为单分支结点 直接前驱:r
    小于根结点P,r小于右子树,r是左子树中最大的点 将P中关键字用r替换,删除结点 删除再插入同一个结点,二叉树的形态可能不同:
    (1).删除的是叶子节点:相同; (2)删除的不是叶子节点:不同。 查找: 特例:倾斜的单分支,平均查找长度和单链表一样;
    左右子树高度差不超过1:平均查找长度为O(log2n); 效率主要与二叉树形态有关。 二分排序判定树唯一,二叉排序树判定树不唯一
    平衡二叉树:AVL树,平衡树也是二叉排序树; 平衡二叉树可以是空二叉树。 (1).
    平衡因子:左子树高度-右子树高度,取(-1,0,1) (2)平衡二叉树左右子树高度之差绝对值不超过1; (3)左右子树都是平衡二叉树;
    (4)插入:看平衡因子,若仍为平衡二叉树,则插入成功;
    否则,插入失败。

你可能感兴趣的:(笔记,#,二叉树,笔记,数据结构,算法)