• Tree知识总结


    http://blog.csdn.net/yalishadaa/article/details/54851324

    http://blog.csdn.net/demon24/article/details/8469683

    http://www.cnblogs.com/hzmark/archive/2012/12/31/Tree.html

     

    平衡二叉树

    衡二叉树又被称为AVL树(区别于AVL算法),它是一棵二叉排序树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

        二叉查找树

        二叉树的一个重要应用是在查找中的使用。使二叉树称为二叉查找树的性质是,对于树中的每个节点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有的项的值大于X中的项。

        二叉查找树的插入、删除节点

        插入操作沿着树查找,如果找到了要插入到树中的X,则什么都不做。否则将X插入到遍历的路径的最后一个节点上。将节点插入到某个节点上只需要修改被插入节点的对应的left或right引用即可。

        删除操作要比查找复杂的多,因为如果删除的不是叶子节点,需要将被删除节点的子孙节点重新连接到删除后的树中并保持查找树的性质。分三种情况讨论删除节点的内容:

        删除的节点是一个叶子节点,那么立即删除该节点。

        删除的节点有一个孩子,用这个孩子节点代替被删除节点,即将被删除节点的父亲节点对被删除节点的引用修改为对它孩子的引用,实现“绕过”被删除节点。

        删除的节点有两个孩子,一般的删除策略是用其右子树的最小数据(右子树中“最左”的一个节点)代替该删除的节点,并递归的删除那个节点。因为右子树的最小数据不会有左子树,所以删除要比第一次要简单。

     

    完全二叉树/完美二叉树 Complete/Perfect Binary Tree

    https://blog.csdn.net/mawming/article/details/46471429

    若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。

    完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。
    一棵二叉树至多只有最下面的两层上的结点的度数可以小于2,并且最下层上的结点都集中在该层最左边的若干位置上,则此二叉树成为完全二叉树。
     

    满二叉树 Full Binary Tress

    其实满二叉树是完全二叉树的特例,因为满二叉树已经满了,而完全并不代表满。所以形态你也应该想象出来了吧,满指的是出了叶子节点外每个节点都有两个孩子,而完全的含义则是最后一层没有满,并没有满。

    AVL平衡二叉搜索树

    定义:平衡二叉树或为空树,或为如下性质的二叉排序树:

     (1)左右子树深度之差的绝对值不超过1;

     (2)左右子树仍然为平衡二叉树.

    平衡因子BF=左子树深度-右子树深度.

    平衡二叉树每个结点的平衡因子只能是1,0,-1。若其绝对值超过1,则该二叉排序树就是不平衡的。

     

    二叉查找树

    Binary Search Tree, 也称二叉搜索树、有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree),是指一棵空树或者具有下列性质的二叉树

    1. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

    2. 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

    3. 任意节点的左、右子树也分别为二叉查找树;

    4. 没有键值相等的节点。

    B+树


    红黑树

    是一种二叉查找树,它是一种平衡的查找树,他能够保证在最坏的情况下动态的集合操作时间为O(lgn)


    二叉树节点的度degree

    子树就是二叉树的分支。度就是分支的数目。 没有分叉的二叉树节点的度就是0度。如果一个节点只有一个分叉就是1度。两个分叉就是2度的子树。


    二叉树叶子节点

    一棵树当中没有子结点(即度为0)的结点,称为叶子结点 leaf node


    任何一棵树中,结点个数比分支个数多一


    常见题目:

    http://www.cnblogs.com/33debug/p/7252371.html

    1. 求两个节点的最近公共祖先;

    2. 求二叉树中最远的两个节点的距离;

    3. 由前序遍历和中序遍历重建二叉树(如:前序序列:1 2 3 4 5 6 - 中序序列 :3 2 4 1 6 5)

    4. 判断一棵树是否是完全二叉树 ;

    5. 将二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向;

    6.求二叉树的宽度;

    7. 判断一棵二叉树是否是平衡二叉树;

    8.判断一颗二叉树是否是另一颗树的子树。

  • 相关阅读:
    javascript 日期月份加减
    ActiveRecord 的类型初始值设定项引发异常
    angularjs $q、$http 处理多个异步请求
    angular.foreach 格式
    PHP基础知识2
    第一个月的学习总结
    JavaScript的学习5
    JavaScript的学习4
    JavaScript的学习3
    JavaScript的学习2
  • 原文地址:https://www.cnblogs.com/codingforum/p/7755874.html
Copyright © 2020-2023  润新知