zoukankan      html  css  js  c++  java
  • python 树


    # 树
    # 非线性结构,每个元素可以有多个前驱和后继
    # 树是n个元素的集合(n>=0)
    # n=0时,称为空树
    # 树只有一个特殊的没有前驱的元素,叫做根root
    # 树中除了根节点外,其他元素只能有一个前驱,可以有多个后继

    # 递归
    # 树T是n个元素的集合(n>=0)。n=0时,称为空树
    # 有且只有一个特殊元素根,剩余元素都可以划分为m个互不相交的集合T1、T2...Tm。而每一个集合都是树,称为T的子树

    # 树的概念
    # 结点:树中的元素
    # 结点的度(degree):结点拥有的子树的数目,记作d(v)
    # 叶子节点:结点度为0,称为叶子结点leaf
    # 分支结点:结点度不为0,称为分支结点
    # 分支:结点之间的关系
    # 内部结点:除根结点外的分支结点,当然也不包含叶子结点
    # 度:树的度是树内各节点的度的最大值。D结点度最大为3,树的度就是3

    # 子节点(child):结点的子树的根结点称为该节点的孩子
    # 双亲节点(parent):一个结点是它各个子树跟结点的双亲
    # 兄弟结点(sibling):有同样父节点
    # 祖先结点:从根节点到节点G所经过的分支上所有的结点,都是结点G的祖先
    # 子孙节点:结点的所有子树上的结点都是子孙节点
    # 结点的层次(level):根结点为第一层、根的孩子为第二层,以此类推,记作L(v)
    # 树的深度(depth):树的层次的最大值
    # 堂兄弟:双亲在同一层的结点

    # 有序树:结点的子树是有顺序的,不能交换
    # 无序树:结点的子树是无顺序的,可以交换
    # 路径:从叶子结点链接到跟结点(保证前一个是吼一个的父节点)
    # 路径长度:路径上节点数-1,也是分支数
    # 森林:m(m>=0)棵不相交的树的集合
    # 对于节点而言,其子树的集合就是森林。A结点的2棵子树的集合就是森林

    # 树的特点
    # 根唯一
    # 子树不相交
    # 除了根以外,每个元素只能有一个前驱,可以有多个后继
    # 根节点没有双亲节点(前驱),叶子结点没有孩子结点(后继)
    # vi是vj的双亲,则L(vi) = L(vj)-1,也就是说双亲比孩子结点的层次小1

    # 二叉树***
    # 每个结点最多有2棵子树
    # 二叉树不存在度数大于2的结点
    # 它是有序树,左子树、右子树是顺序的,不能交换次序
    # 即使某个结点只有一颗子树,也要确定它是左子树还是右子树
    # 二叉树的5中基本形态
    # 空二叉树
    # 只有一个根结点
    # 根结点只有左子树
    # 根结点只有右子树
    # 根结点有左子树和右子树

    # 斜树(是二叉树)
    # 左斜树,所有节点都只有左子树
    # 右斜树,所有结点都只有右子树

    # 满二叉树***
    # 一棵二叉树的所有分支结点都存在左子树和右子树,且所有叶子结点只存在在最下面一层
    # 同样深度的二叉树中,满二叉树结点最多
    # k为深度(1=<k=<n),则结点总数为2的k次方-1
    # 一个深度为4的满二叉树,节点数为2^4-1=15

    # 完全二叉树
    # 若二叉树的深度为k,二叉树的层数从1到k-1层的结点数都达到了最大个数,在第k层的所有结点都集中在最左边,这就是完全二叉树
    # 最后一层从左边开始放*
    # 完全二叉树由满二叉树引出
    # 满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树
    # k为深度(1=<k=<n),则结点总数最大值为2的k次方-1,当达到最大值的时候就是满二叉树

    # 二叉树的性质
    # 1 在二叉树的第i层上,至少有2^(i-1)个结点(i>=1)
    # 2 深度为k的二叉树,至少有2^k-1个结点(k>=1)
    # 3 对任何一棵二叉树T,叶子结点数位n0,度数为1的结点数位n1,度数为2的结点数为n2
    # n0 = n2 + 1(即:叶子结点数 - 1 就等于度数为2的结点数)
    # 总结点数n = n0 + n1 + n2
    # 分支数 = n - 1 = n0 + n1 + n2 - 1
    # 分支数 = n0*0 + n1*1 + n2*2
    # 所以 n0 + n1 + n2 - 1 = n0*0 + n1*1 + n2*2 ==> n2 = n0 - 1
    # 4 高度为k的二叉树,至少有k个结点
    # 5 含有n(n>=1)个结点的高度至多为n
    # 6 含有n(n>=1)个结点的高度至少为math.ceil(log2(n+1)),向上取整
    # 7 具有n个结点的完全二叉树的深度为int(log2n)或者math.ceil(log2(n+1))
    # 8 具有n个结点的完全二叉树,结点按照层次编号
    # 如果i=1,则结点i是二叉树的根结点
    # 如果i>1,则其双亲是int(i/2),向下取整
    # 如果父结点是i,那么左孩子结点就是2i,右孩子结点是2i+1
    # 如果2i>n,则结点i无左孩子,即结点i为叶子结点;否则其左孩子存在编号为2i
    # 如果2i+1>n,则结点i无右孩子,注意这里并不能说明结点i没有左孩子;否则右孩子存在编号为2i+1
  • 相关阅读:
    windows pm2 开机启动
    微信小程序自定义组件封装及父子间组件传值
    cloc 统计代码行数工具
    小程序获取当前页面路径url
    小程序navigator点击有时候会闪一下
    Centos7安装python3与Python2共存
    Docker配置国内官方镜像
    Centos7下Docker的安装与使用
    Centos7yum源修改为国内阿里源
    Vim下一键运行python代码
  • 原文地址:https://www.cnblogs.com/lizitest/p/9612916.html
Copyright © 2011-2022 走看看