zoukankan      html  css  js  c++  java
  • 二叉树的概念、算法简介及树的平衡

    在计算机科学中,树由称为结点的元素按照层次结构的方式组织而成。层次结构最顶端的结点称为根。与根结点直接相连的结点称为根的子结点,通常子结点本身也有属于它们自己的子结点。除了根结点外,在这个层次体系中的每个结点都有唯一的父结点,也就是与其直接相连的上级结点。

    一个节点拥有多少个子节点取决于树的类型,这个量值称为树的的分支因子,它决定了当插入结点时树的分支扩展的速度。

    二叉树是一种相对简单但功能强大的树,其树的分支因子值为2。

    二叉树的介绍

    二叉树是一种将结点按照层次结构组织起来的数据结构,每个结点最多只有两个与它直接相关联的子结点。直接连接在结点下方的那个结点称为子结点,而与每个子结点直接相连的上方结点称为父结点。结点也有兄弟、子孙和祖先。一个结点的兄弟结点是它的父亲结点的其他子结点。一个结点的子孙结点是其所有分支下的结点。而结点的祖先结点则是在该结点与根结点之间路径上的所有结点。

     

     二叉树中的每一个结点都包含3部分:一个数据成员和左右两个指针。

    通过这种3个成员的结构体,将每个结点的左右指针分别指向该结点的子结点,以此来构建一棵二叉树。如果某个结点没有对应的左子结点或右子结点,就将相应的指针设置为NULL。这种方法便于标识出一个分支的结束。

    树的分支是一系列的结点,从根结点开始到某个叶子结点结束。

    叶子结点位于树的边缘,且没有子结点。多颗树组成的集合称为森林。

    树的4种周游算法

    1、先序遍历

    给定一颗树,按照先序遍历的方式,首先访问它的根结点,然后是左子结点,最后是右子结点。按照从左到右的方式依次遍历各个结点,以相同的方式将左子结点和右子结点当做新的子树的根。

    先序遍历是按照深度优先的方式遍历结点的。

    2、中序遍历

    给定一颗树,按照中序遍历的方式,首先访问左子结点,然后是根结点,最后是右子结点。按照从左到右的顺序依次访问各个结点,以相同的方式将左子结点和右子结点当做新的子树的根。

    3、后序遍历

    给定一颗树,按照后序遍历的方式,首先访问左子结点,然后是右子结点,最后是根结点。按照从左到右的顺序依次访问各个结点,以相同的方式将左子结点和右子结点当做新的子树的根。

    4、层级遍历

    要用层级遍历周游一颗树,首先访问树的根,然后依次向下层处理,按照从左到右的顺序访问每层的结点。层级遍历运用了广度优先的策略。

     

     树的平衡

    对于给定数量的结点,保证树的高度尽可能的短的过程叫做树的平衡。这意味着,在结点加入下一层之前必须保证本层结点满额。正式的说法是,如果满足树的所有叶子节点都在同一层上,或者所有叶子结点都在最后两层上,且倒数第二层是满的,则这颗树是平衡的。

    如果一颗平衡树最后一层的所有叶子结点都在最靠左的位置上,则称这颗树是左平衡的。可以利用左平衡二叉树来帮助实现堆和优先级队列。

  • 相关阅读:
    FZU 2112 并查集、欧拉通路
    HDU 5686 斐波那契数列、Java求大数
    Codeforces 675C Money Transfers 思维题
    HDU 5687 字典树插入查找删除
    HDU 1532 最大流模板题
    HDU 5384 字典树、AC自动机
    山科第三届校赛总结
    HDU 2222 AC自动机模板题
    HDU 3911 线段树区间合并、异或取反操作
    CodeForces 615B Longtail Hedgehog
  • 原文地址:https://www.cnblogs.com/idreamo/p/8097324.html
Copyright © 2011-2022 走看看