zoukankan      html  css  js  c++  java
  • [data structure]树的一些基本概念

    术语

    • Root 没有父节点的节点。
    • Siblings 有相同父节点的节点。
    • Internal node 至少有一个子节点的节点。
    • External node 没有子节点的节点。
    • Ancestors of a node 父节点,父节点的父节点...
    • Descendant of a node 子节点,子节点的子节点...
    • Depth of a node 祖先节点的个数。
    • Height of a tree 所有节点中的最大深度。
    • Degree of a node 子节点的个数。
    • Degree of a tree 树中所有节点度的最大值。
    • Subtree 一个节点和其所有子孙节点组成的树。

    二叉树

    定义:一个树,每个内部节点,最多只有两个子节点,每个节点的子节点是有序的,一般称为left child和right child。
    递归的定义:一个树有一个单个根节点,或者一个树其根节点有两个有序的子节点,每个节点又是一个二叉树的根节点。

    二叉树最大的节点数

    • 某个深度的最大节点数:(2^i)(i)是深度,这个好理解,因为每层的最大节点数是(2,4,8,16...)这样增长的。
    • 二叉树的最大节点数: (2^{k+1}-1),把每层相加就好(sum_{i=0}^k{2^i}=2^{k+1}-1)

    叶子节点和度2节点的关系

    对于非空二叉树T,(n_0)为叶子节点数,而(n_2)是度2节点数,则有(n_0=n_2+1)

    (n,B)分别为二叉树的节点总数和二叉树的分叉数,(n_0, n_1, n_2)分别为度0,1,2节点的个数,则有(B+1=n)(B=n_1+n_2),联立消去(B),则有(n_1+2n_2+1=n),又有(n_0+n_1+n2=n),则得出(n_0=n_2+1)

    满二叉树

    给定高度(k),一共有(2^{k+1}-1)个节点的二叉树,是满二叉树。

    用数字来标记二叉树,从上到小,从左到右,数字依次递增。

    • 对于节点(i)来说,他的父节点为(i/2),除了(i=1)
    • 对于节点(i)来说,它的左子节点为(2i),除了(2i>n),此时其没有左子节点。又子节点为(2i+1)同理。

    完全二叉树

    相对于满二叉树来说,完全二叉树最后一层不是满的,也就是说,最后一层的节点个数不是(2^i)但要大于1。

    二叉树的存储

    两种方式,一种是链式结构,一种是连续的数组方式。

    • 链式结构,每个节点是数据单元 + 两个指向子节点的指针,对于链式的结构,会有n+1个 NULL的指针
    • 连续数组结构,用数组的索引来区分节点,例如A[1]是根,A[2],A[3]是A[1]的子节点

    二叉树的遍历

    • 先序遍历:先遍历当前节点,再遍历左子树,再遍历右子树。
    • 中序遍历:先遍历左子树,再遍历当前节点,再遍历右子树。
    • 后序遍历:先遍历左子树,再遍历右子树,再遍历当前节点。
  • 相关阅读:
    CI框架主题切换的功能
    centos7 编译安装 php7.4
    单用户登陆demo-后者挤到前者,类似QQ
    nginx 负载均衡的配置
    PHP计算每月几周,每周的开始结束日期
    Centos7 编译安装PHP7
    TP 3.2.3 接入PHPMailer
    外部js引用vue实例环境的方式
    linux常用命令
    计算机中的二级制
  • 原文地址:https://www.cnblogs.com/WAoyu/p/13153991.html
Copyright © 2011-2022 走看看