zoukankan      html  css  js  c++  java
  • 二叉树及存储结构

    一、二叉树的定义

    二叉树T:一个有穷的结点集合。

    • 这个集合可以为空
    • 若不为空,则它是由根节点和称为其左子树(T_L)右子树(T_R)的两个不相交的二叉树组成。

    二叉树具体五种基本形态

    二叉树的子树有左右顺序之分

    二、特殊二叉树

    2.1 斜二叉树(Skewed Binary Tree)

    斜二叉树如下图所示:

    2.2 完美二叉树(Perfect Binary Tree)

    完美二叉树也称作满二叉树(Full Binary Tree)

    完美二叉树如下图所示:

    2.3 完全二叉树(Complete Binary Tree)

    有n个结点的二叉树,对树中结点按从上至下、从左到右顺序进行编号,编号为(i(1leq{i}leq{n}))结点与满二叉树中编号为i结点在二叉树位置相同。

    完全二叉树如下图所示:

    如下图所示的二叉树即不为完全二叉树:

    三、二叉树的几个重要性质

    • 一个二叉树第i层的最大结点树为:(2^{i-1}, quad{i}geq1)

    • 深度为k的二叉树有最大结点总数为:(2^k -1, quad kgeq{1})

    • 对任何非空二叉树T,若(n_0)表示叶节点的个数、(n_2)是度为2的非叶结点个数,那么两者满足关系(n_0=n_2+1)

    四、二叉树的抽象数据类型定义

    类型名称:二叉树

    数据对象集:一个有穷的结点集合。若不为空,则由根节点和其左、右二叉子树组成。

    操作集:(BTin{BinTree},quad Item in ElementType),其重要操作有:

    1. BooleanIsEmpty(BinTree BT):判断BT是否为空;
    2. void Traversal(BinTree BT):遍历,按某顺序访问每个结点;
    3. BinTree CreateBinTree():创建一个二叉树。

    4.1 常用的遍历方法

    接下来介绍几个常用的遍历方法,未来会详细讲解

    void PreOrderTraversal(BinTree BT):先序 --》根、左子树、右子树;

    void InOrderTraversal(BinTree BT):中序 --》左子树、根、右子树;

    void PostOrderTraversal(BinTree BT):后序 --》左子树、右子树、根;

    void LevelOrderTraversal(BinTree BT):层次遍历,从上到下、从左到右

    五、二叉树的存储结构

    5.1 顺序存储结构

    完全二叉树:按从上至下、从左到右顺序存储,n个结点的完全二叉树的结点父子关系

    • 非根节点(序号i>1)的父结点的序号是([i/2])
    • 结点(序号为i)的左孩子结点的序号是2i(若(2ileq{n}),否则没有左孩子);
    • 结点(序号为i)的右孩子结点的序号是2i+1(若(2i+1leq{n}),否则没有右孩子)

    一般二叉树也可以采用这种结构,但会造成空间浪费……

    5.2 链表存储

    /* c语言实现 */
    
    typedef struct TreeNode *BinTree;
    typedef BinTree Position;
    struct TreeNode{
      ElementType Data;
      BinTree Left;
      BinTree Right;
    }
    
    # python语言实现
    
    class TreeNode:
         def __init__(self, x):
             self.val = x
             self.left = None
             self.right = None
    

    单个子节点用下图所示链表表示:

    使用链表对整棵树的表示如下:

  • 相关阅读:
    Java入门系列-10-数组
    Java入门系列-09-循环结构
    Java入门系列-08-选择结构
    Java入门系列-07-从控制台中接收输入
    Java入门系列-06-运算符
    05-数据类型和类型转换
    004 java中的变量
    Filter过滤器实现同一地址手机和电脑页面不同
    Java 8 Lambda表达式10个示例【存】
    Centos7+Apache2.4+php5.6+mysql5.5搭建Lamp环境——为了wordPress
  • 原文地址:https://www.cnblogs.com/nickchen121/p/11499145.html
Copyright © 2011-2022 走看看