• 数据结构树形结构(2)


    二叉树以及其节点的实现

    1.
    二叉树节点的定义及实现
    根据二叉树的特点可知,二叉树的子节点最多有两个子树,分别是左子树和右子树。所以,一个二叉树的节点应有三个部分组成:

    ² 当前节点数据<T>

    ² 左子节点的引用;

    ² 右子节点的引用。

     

    如下图左部分的Node类定义。


     

    Node类的实现:

    Code

     

    2 二叉树的实现

    二叉树的实现主要有能下几个功能:

    Ø 构造一个新的二叉树

    Ø 插入指定节点的左子节点;

    Ø 插入指定节点的右子节点;

    Ø 删除指定节点的左子节点;

    Ø 删除指定节点的右子节点;

    Ø 判断二叉树是否为空;

    Ø 判断节点是否为叶子节点。

    代码实现如下: 

    Code

     

    3 二叉树的遍历
    二叉树的遍历是按照某种顺序对树中的每个节点访问且只能访问一次的过程,包括查询、修改、计算等。
    二叉树的遍历实际是将非线性结构线性化,它是二叉树的各种计算和操作的基础。

    由二叉树的定义可知,一棵二叉树由根结点、左子树和右子树三部分组成,若规定DLR分别代表遍历根结点、遍历左子树、遍历右子树,则二叉树的遍历方式有6种:DLRDRLLDRLRDRDLRLD。由于先遍历左子树和先遍历右子树在算法设计上没有本质区别,所以,只讨论三种方式:DLR(先序遍历)、LDR(中序遍历)和LRD(后序遍历)

                      先序遍历:先访问根节点,再访问左子树,再访问右子树。

                      中序遍历:先访问左子树,再访问根节点,最后访问右子树。

                      后序遍历:先访问左子以,再访问右子树,最后访问根节点。

     

     

    3.1 先序遍历(DLR

    先序遍历的基本思想是:首先访问根结点,然后先序遍历其左子树,最后先序遍历其右子树。先序遍历的递归算法实现如下。(这里只是获取节点的值) 

    Code

      非递归算法实现: 

    Code

       

    3.2 中序遍历(LDR

    中序遍历的基本思想是:首先中序遍历根结点的左子树,然后访问根结点,最后中序遍历其右子树。中序遍历的递归算法实现如下: (附件)

    3.3 后序遍历(LRD

    后序遍历的基本思想是:首先后序遍历根结点的左子树,然后后序遍历根结点的右子树,最后访问根结点。后序遍历的递归算法实现如下:  (附件)
    代码下载

  • 相关阅读:
    Visual Studio 2013各个版本密钥(亲测可用)
    Duilib bkimage 属性
    VC++ 文件夹的打开
    孙鑫- VC++在对话框程序中让对话框捕获WM_KEYDOWN消息
    OpenCV窗口置顶的方法
    OpenCV设置感兴趣区域(roi)
    Ubuntu 12,04安装ROS Hydro
    VC获取任务栏窗口及其子窗口句柄
    关于调用静态链接库LIB,提示重定义或库冲突的错误
    DuiLib如何禁用双击标题栏窗口最大化
  • 原文地址:https://www.cnblogs.com/wservices/p/1552427.html
Copyright © 2020-2023  润新知