zoukankan      html  css  js  c++  java
  • 二叉树基本原理

    二叉树,是度为二的树,二叉树的每一个节点最多只有二个子节点,且两个子节点有序。

    下面开始介绍几种常见的二叉树类型:

    1. 完全二叉树

    若设二叉树的深度为k,除第k层外,其他各层(1~(k-1)层)的节点数都达到最大值,且第k层所有的节点都连续集中在最左边,这样的树就是完全二叉树。如图:

    Image
    (图片仅参考网友,侵删)

    完全二叉树是一种效率很高的数据结构,而堆是一种完全二叉树或者近似完全二叉树,因此堆的效率也很高;像十分常用的排序算法、Dijkstra算法、Prim算法等都要用堆才能优化,二叉排序树的效率也要借助平衡性来提高,而平衡性是基于完全二叉树的。

    (以上摘自:https://www.jianshu.com/p/6a30657bf894)

    2. 满二叉树

    满二叉树的定义分两种:国内定义和国外(国际)定义。

    国内定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。如图:

    Image

    国外(国际)定义:如果一棵二叉树的结点要么是叶子结点,要么它有两个子结点,这样的树就是满二叉树。(一棵满二叉树的每一个结点要么是叶子结点,要么它有两个子结点,但是反过来不成立,因为完全二叉树也满足这个要求,但不是满二叉树),如图:

    Image

    当然,不难看出,国外(国际)的定义已经包含了国内的定义了,也就是国内的定义是国外定义的子集。

    (以上摘自:https://baike.baidu.com/item/满二叉树/7773283?fr=aladdin)

    3. 二叉查找树(BST)

    二叉查找树,又称二叉排序树,二叉搜索树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:

    • 若左子树不空,则左子树上所有节点的值均小于它的根节点的值;
    • 若右子树不空,则右子树上所有节点的值均大于它的根节点的值;
    • 左、右子树也分别为二叉排序树;
    • 没有键值相等的节点。

    Image

    4. 平衡二叉树(AVL)

    平衡二叉树实际上也是一个二叉查找树,但是又和二叉查找树有所不同。平衡二叉树包括了二叉查找树的所有特性,但与二叉查找树不同的是,平衡二叉树的平衡因子不能超过1。

    意思是说,要么它是一棵空树,要么它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。

    在网上找了很多关于平衡二叉树的文章,都只阐述了以上原理,但是什么是平衡因子?下面就这点详细的介绍一下,如图:
    Image

    a树的根节点是节点5,节点5的深度为4,所以a树的深度为4,下面计算所有节点的平衡因子:

    1. 节点5,左子树深度为3,右子树深度为2,那么,节点5的平衡因子为|3-2|=1;
    2. 节点2,左子树深度为1,右子树深度为2,平衡因子为|1-2|=1;
    3. 节点6,无左子树,故左子树深度为0,右子树深度为1,平衡因子为|0-1|=1;
    4. 节点1,无左子树和右子树,故左右子树的深度均为0,平衡因子为|0-0|=0;
    5. 节点4,左子树深度为1,无右子树,故右子树深度为0,平衡因子为|1-0|=1;
    6. 节点7,无左子树和右子树,故左右子树的深度均为0,平衡因子为|0-0|=0;
    7. 节点3,无左子树和右子树,故左右子树的深度均为0,平衡因子为|0-0|=0;

    通过上述计算,得到a树的所有节点的平衡因子,均没有超过1,所以a树是一个平衡二叉树。同理计算得到b树是一个二叉查找树,但不是一个平衡二叉树。

    本文主要记录了各种二叉树的类型,接下来会专门写几篇文章,记录如何通过代码组成各种二叉树,并且对二叉树进行增删查改,虽然网上有很多类似的文章,但是我还是觉得自己写一遍,是另一种理解,感觉这是一个大工程,告诉我自己,坚持下去~~

    ps:本文多是从其他地方复制的理论,结合自己的理解,可能并不是特别完整,如果有错误的地方,欢迎指正,谢谢~~

  • 相关阅读:
    【转】Oracle 建立索引及SQL优化
    SQL Server Express LocalDB 存入中文产生乱码问题
    安装(c)npm及搭建Vue项目详解
    【转】VSCode 调试 Node.js 介绍
    【转】C#根据用户信息,生成token和cookie的方法
    远程连接 Docker 的 MySQL 服务
    mysql服务器和服务器启动程序
    一台物理机上运行多个mysql实例(Running Multiple MySQL Instances on One Machine)
    mysql5.7主从切换(master/slave switchover)
    选项文件(Option Files)/配置文件(Configuration Files)的使用
  • 原文地址:https://www.cnblogs.com/ghm-777/p/11431270.html
Copyright © 2011-2022 走看看