zoukankan      html  css  js  c++  java
  • 数据结构树形结构(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

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

  • 相关阅读:
    10个优秀HTML5网站案例赏析
    读书笔记之:More Exceptional C++ (2002) [++]
    函数模板与函数重载
    vector中元素的删除
    C++常用程序
    Linux下的示例程序
    要求或禁止在堆中产生对象
    读书笔记之:Effective C++ (2005)[++]
    读书笔记之:More Effective C++ (2007)[+]
    读书笔记之:Essential C++ (2001)[+]
  • 原文地址:https://www.cnblogs.com/wservices/p/1552427.html
Copyright © 2011-2022 走看看