美文网首页
树的基本概念和操作

树的基本概念和操作

作者: 空即是色即是色即是空 | 来源:发表于2017-11-24 23:19 被阅读13次

    树(Tree)是n个结点的有限集。
    在任意一棵非空树中:
    (1) 有且仅有一个特定的称为跟(Root)的结点
    (2) 当n > 1时,其余结点可以分为m(m > 0)个互不相交的有限集T1, T2,…,Tm,其中每一个集合本身又是一棵树,并且称为树的子树(SubTree)

    由上可以看出,树的定义本身是递归定义的。

    思考: 此处是否意味着树的某些操作可以递归来定义呢?

    结点拥有的子树数称为结点的
    度为0的结点称为叶子或终端结点
    树的度是树内各结点的度的最大值
    树中结点的最大层次称为树的深度高度

    森林是m(m>0)棵互不相交的树的集合。
    对树中每个结点而言,其子树的集合为森林。
    森林和树相互递归地定义来描述树

    一棵N个结点的树有N-1条边(因为除了root,其它结点都经由一条边出去)


    任意的树都可以用儿子(一个结点指向第一个儿子)、兄弟(另一个结点指向下一个兄弟)表示法将其转变成二叉树


    二叉树,首先它是一棵树,它的特定是每个结点至多只有两颗子树(即二叉树中不存在度大于2的结点)。并且,二叉树的子树有左右之分,其次序不能任意颠倒。

    二叉树的性质

    性质1. 在二叉树的第i层至多有2i-1个结点(归纳法)

    性质2. 深度为k的二叉树至多有2k -1 个结点(公式)

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

    一棵深度为k且有2k-1个结点的二叉树称为满二叉树
    深度为k,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树编号从1至n的结点一一对应时,称之为完全二叉树

    满二叉树 VS 完全二叉树


    完全二叉树的存储方式

    • 顺序存储(根结点为1)

    编号为i的左子树为2i, 右子树为2i+1

    • 链式存储

    lchild data rchild


    二叉树遍历

    • 先序
    • 中序
    • 后序

    中序遍历非递归遍历

    遇到一个结点,将其压入堆栈,并去遍历它的左子树
    当左子树遍历结束,从栈顶弹出这个结点并访问它
    然后对右子树再进行中序遍历


    中序遍历非递归算法1.png

    先序遍历非递归遍历

    先序遍历非递归算法.png

    后序遍历非递归遍历

    print语句放在T = T-> Right 之后?

    相关文章

      网友评论

          本文标题:树的基本概念和操作

          本文链接:https://www.haomeiwen.com/subject/mvtqbxtx.html