• 2. 树和二叉树(一)


    (定义部分摘自清华大学出版社《数据结构(C语言版)》)

    1. 树的定义和基本术语

       树(Tree)是具有n(n>=0)个节点的有限集合。在任意一颗非空树中:(1)有且仅有一个特定的节点称为“根”(root);(2) 当n>1时,其余节点又可以分为m个互不相交的有限集合T1,T2,...,Tm。这些集合,称为子树。m为与root直接相连的节点数目。

       树的节点包含一个数据元素及若干指向其子树的分支。

       结点拥有的子树数目称为结点的度(degree)

       出度为0的节点称为叶子(Leaf)或者终端结点

       度不为零的结点称之为分支节点。 

       一棵树的度是树内各结点的度的最大值。

       一棵树的深度(depth):自root出发,到达某个叶子的路径长度的最大值。

       有序树: 树中结点的各个子树从左至右是有序的,否则为无序树。

       森林(Forest): m个互不相交的树的集合。对树中的每个节点而言,其子树的集合即为森林。

       ---------------------------------------------------------------------------------------------------

       二叉树(Binary Tree)

       一种特殊的树结构,其特点是每个结点至多有两颗子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,即为有序树。

       满二叉树: 一棵深度为k且有 2^k-1个节点的二叉树。

       完全二叉树: 对满二叉树的结点进行连续编号,约定编号从根节点开始,自上而下,自左至右。深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应。

    2. 二叉树的性质

       性质1 在二叉树的第i层上至多有2^(i-1)个节点(i>=1)。

       性质2 深度为k的二叉树至多有2^k -1个结点(k>=1)。

       性质3 对于任意一棵二叉树T,如果其终端结点数为n0,度为2的结点树为n2,则有 n0 = n2 +1;

       性质4 具有n个结点 的完全二叉树的深度为floor(logn)+1(此处floor意为取下整)。

       性质5 如果对一棵有n个节点的完全二叉树的结点按层序编号,则对任一节点i(1<=i<=n),有

               (1) 如果i=1,则节点i是二叉树的根,无双亲;如果i>1,则其双亲PARENT(i)是结点 floor(i/2)。

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

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

    根据二叉树的特点,既可以用数组的形式来存储,也可以用链式存储的结构。(ps: 如果是完全二叉树,数组形式存储比较好。然而最坏情况下,当一个深度为k且只有k个单节点的树用数组存储的时候,数组的大小为 2^k -1。)所以一般推荐用链式结构存储二叉树。

    typedef struct BinaryNode

    {

            TElemType  data;  // 数据域

            struct BinaryNode *Lchild, *Rchild; //指针域,左右孩子节点指针

            //   [optional] struct BinaryNode *Parent;  如果需要找到parent节点 

    }BinaryNode, *BinaryTree;

    BinaryNode 用于定义二叉树中的结点;

    BinaryTree 用于存储二叉树结构。

    (未完待续)

  • 相关阅读:
    shell脚本练习
    Linux 在线模拟器
    附件2:async/await
    附件1:setTimeout与闭包
    Java基础复习(二、String相关)
    Java基础复习(一、数据类型)
    Java的自动装箱和拆箱
    牛客网
    创建新模块时遇到的几个问题
    Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
  • 原文地址:https://www.cnblogs.com/double-win/p/3592051.html
Copyright © 2020-2023  润新知