zoukankan      html  css  js  c++  java
  • 大话数据结构(十四)——二叉树的理论知识

    1、二叉树的定义

    二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成。

    1.1 二叉树特点

    二叉树的特点有:

    1)每个结点最多有两棵子树,所以二叉树不存在度大于2的结点。注意不是只有两棵子树,而是最多有,没有子树或者有一棵子树也是可以的。

    2)左子树和右子树是有顺序的,次序不能任意颠倒,就像人的左右手一样。

    3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。

    二叉树有五种基本形态:

    1)空二叉树

    2)只有一个根结点

    3)根结点只有左子树

    4)根结点只有右子树

    5)根结点有左子树和右子树。

    若只从形态上考虑,三个结点的树只有两种情况;

    对于二叉树来说,由于要区分左右,则有五种形态:

    1.2 特殊二叉树

    1、斜树

    斜树:一定要是斜的。

    所有的结点都只有左子树的二叉树叫做左斜树。所有结点都是只有右结点右子树的叫做右斜树。

    斜树有个特点:每一层都只有一个结点,结点的个数与二叉树的深度相同。

    2、满树

    在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层,这样的二叉树称为满二叉树。

    满二叉树特点:

    1)叶子只能出现在最下一层,出现在其他层就不可能达成平衡。

    2)非叶子结点的度一定是2,否则就是“缺胳膊掉腿”了

    3)在同样深度的二叉树中,满二叉树的结点树最多,叶子数最多。

    3、完全二叉树

    对一棵树具有n个结点的二叉树按层序编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这样的二叉树称为完全二叉树。

    注意:满二叉树一定是完全二叉树,而完全二叉树不一定是满二叉树。

    完全二叉树特点:

    1)叶子结点只能出现在最下两层

    2)最下层的叶子一定集中在左部连续位置

    3)倒数二层,若有叶子结点,一定都在右部连续位置

    4)如果结点度为1,则该结点只有左孩子,即不存在只有右孩子情况

    5)同样结点树的二叉树,完全二叉树的深度最小。

    判断是否为完全二叉树的方法:

    看树示意图,心中默默给每个结点按照满二叉树的结构逐层顺序编号,如果编号出现空档,就说明不是完全二叉树,否则就是。

    2、二叉树的性质

    2.1 性质1

    性质1:在二叉树的第i层上至多有2^(i-1)个结点

    2.2 性质2

    性质2:深度为k的二叉树至多有2^k-1个结点

    2.3 性质3

    性质3:对任何一棵二叉树T,如果其终端结点数(叶子结点数)为n0,度为2的结点数为n2,则n0=n2+1。

    推导过程:

    1)一棵二叉树,除了叶子结点,剩下的就是度为1或为2的结点数,设n1为度是1 的结点数,则树T结点总数为n=n0+n1+n2

    2)连接线数,由于根结点只有分支出去,没有分支进入,所以分支线总数为结点总数减去1,即n-1,并且等于n1+2*n2

    3)两式联立,得到叶子结点数为n0=n2+1

    2.4 性质4

     性质4:具有n个结点的完全二叉树的深度为[log2n]+1([x]表示不大于x的最大整数)

    2.5 性质5

    性质5:如果对一棵有n个结点的完全二叉树(其深度为[log2n]+1)的结点按层数编号(从第1层到第[log2n]+1层,每层从左到右),对任一个结点i(1<=i<=n)有:

    1)如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点的[i/2]

    2) 如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子是结点2i

    3) 如果2i+1>n,则结点i无右孩子,否则其右孩子结点是2i+1

  • 相关阅读:
    keycloak~管理平台的查询bug与自定rest中文检索
    gRPC四种模式、认证和授权,C#实战演示
    asp.net core 集成JWT
    从不同使用场景来介绍git的基础命令
    用scikit-learn进行LDA降维——以前没有注意,原来LDA降维竟然这么好用!对无监督的任务使用PCA进行降维,对有监督的则应用LDA。
    ID3/Cart/C4.5区别
    超参数调优——google Vizier采用迁移学习的思想,主要是从之前调参的经验中学习,为新算法提出最佳超参数
    sklearn 绘制roc曲线
    原来ROC曲线更加健壮地反映模型的效果,看来还是比较关键的(就像逻辑回归,你总是希望模型让0/1分类的数据尽可能都向两端靠对不对,ROC就是反映这个好坏的指标)
    word2vec的原理——根据单词的上下文去预测单词出现,然后让整体的概率最大化。学习这样一个神经网络,然后选择隐藏作为vector表示。最初单词是onehot编码!
  • 原文地址:https://www.cnblogs.com/snowwang/p/6114365.html
Copyright © 2011-2022 走看看