递归算法设计技术

简介: 实验目的实验内容实验过程程序清单复杂度分析运行结果

实验目的

通过本次实验,掌握二叉树递归处理算法,并会分析该算法的时间复杂度。


实验内容

删除二叉树的子树:假设二叉树中的结点均不相等,采用二叉链存储,设计递归算法删除根结点值为x的子树。


实验过程


1.算法设计

1.首先递归创建一颗二叉树


根据输入的节点值创建二叉树根据用户输入的节点值(#表示空节点),使用递归的方式创建二叉树。


2.查找要删除的子树的根节点


输入要删除的子树的根节点的值,程序在二叉树中查找值为该值的节点,并返回该节点的指针。


3.递归删除子树


对于当前节点,依次递归删除其左子树和右子树中值为子树根节点值的子树。如果当前节点为空或者当前节点的值不等于子树根节点的值,则直接返回当前节点的指针。如果当前节点的左子树或右子树中存在值为子树根节点的节点,则将该节点的左子树或右子树置为空,并释放该节点的空间。


4.输出删除子树后的二叉树


使用中序遍历的方式遍历二叉树,输出删除子树后的节点值序列。


5.输出删除成功,结束程序


程序清单

#include <stdio.h>
#include <stdlib.h>
#define TYPE char
struct biTree {
    TYPE data;
    struct biTree *lchild;
    struct biTree *rchild;
};
/**
 * 释放节点T函数
 * @param T
 */
void del(struct biTree *T) {
    if (T) {
        if (T->lchild)del(T->lchild);
        if (T->rchild)del(T->rchild);
        free(T);
    }
}
/**
    这里设置一个父结点指针
    因为free只会释放所在结点里面的内容
    并不会置空
 **/
void delXsub(struct biTree *T, int x) {
    struct biTree *p = T;
    if (p->lchild && p->lchild->data == x) {
        del(p->lchild);
        p->lchild = NULL;
    }
    if (p->rchild && p->rchild->data == x) {
        del(p->rchild);
        p->rchild = NULL;
    }
    if (p->lchild)delXsub(p->lchild, x);
    if (p->rchild)delXsub(p->rchild, x);
}
/**
 * 递归先序遍历创建二叉树,返回二叉树
 * @param T
 * @return
 */
struct biTree *create(struct biTree *T) {
    TYPE data;//当前结点
    printf("data=");
    scanf("%c", &data);
    getchar();
    if (data != '#') {
        T = (struct biTree *) malloc(sizeof(struct biTree *));
        T->data = data;
        T->lchild = NULL;
        T->rchild = NULL;
        T->lchild = create(T->lchild);
        T->rchild = create(T->rchild);
    }
    return T;
}
/**
 * 中序遍历二叉树
 * @param T 
 */
void inOrder(struct biTree *T) {
    if (T != NULL) {
        inOrder(T->lchild);
        printf("%c", T->data);
        inOrder(T->rchild);
    }
}
 int main() {
    char x;
    struct biTree *T = (struct biTree *) malloc(sizeof(struct biTree));
     //创建一棵二叉树
    T = create(T);
    printf("中序遍历结果为:\n");
    inOrder(T);
    //换行
    printf("\n");
    printf("请输入您要删除的x的值:x=");
    scanf("%c", &x);
    printf("删除后中序遍历结果为:\n");
    if (T->data == x) {
        //调用函数删除
        del(T);
    } else {
        //再次查找
        delXsub(T, x);
    }
    inOrder(T);
    printf("删除结点及其子树成功!");
    return true;
}


复杂度分析

(1)时间复杂度

O(n)

(2)空间复杂度

O(log2n)


运行结果

结果一


33.png


结果二:

34.png






相关文章
|
8月前
|
人工智能 运维 算法
基于 C# 深度优先搜索算法的局域网集中管理软件技术剖析
现代化办公环境中,局域网集中管理软件是保障企业网络高效运行、实现资源合理分配以及强化信息安全管控的核心工具。此类软件需应对复杂的网络拓扑结构、海量的设备信息及多样化的用户操作,而数据结构与算法正是支撑其强大功能的基石。本文将深入剖析深度优先搜索(Depth-First Search,DFS)算法,并结合 C# 语言特性,详细阐述其在局域网集中管理软件中的应用与实现。
191 3
|
4月前
|
运维 监控 算法
基于 Java 滑动窗口算法的局域网内部监控软件流量异常检测技术研究
本文探讨了滑动窗口算法在局域网流量监控中的应用,分析其在实时性、资源控制和多维分析等方面的优势,并提出优化策略,结合Java编程实现高效流量异常检测。
157 0
|
5月前
|
监控 算法 安全
基于 C# 基数树算法的网络屏幕监控敏感词检测技术研究
随着数字化办公和网络交互迅猛发展,网络屏幕监控成为信息安全的关键。基数树(Trie Tree)凭借高效的字符串处理能力,在敏感词检测中表现出色。结合C#语言,可构建高时效、高准确率的敏感词识别模块,提升网络安全防护能力。
136 2
|
7月前
|
监控 算法 JavaScript
基于 JavaScript 图算法的局域网网络访问控制模型构建及局域网禁止上网软件的技术实现路径研究
本文探讨局域网网络访问控制软件的技术框架,将其核心功能映射为图论模型,通过节点与边表示终端设备及访问关系。以JavaScript实现DFS算法,模拟访问权限判断,优化动态策略更新与多层级访问控制。结合流量监控数据,提升网络安全响应能力,为企业自主研发提供理论支持,推动智能化演进,助力数字化管理。
187 4
|
8月前
|
机器学习/深度学习 存储 算法
18个常用的强化学习算法整理:从基础方法到高级模型的理论技术与代码实现
本文系统讲解从基本强化学习方法到高级技术(如PPO、A3C、PlaNet等)的实现原理与编码过程,旨在通过理论结合代码的方式,构建对强化学习算法的全面理解。
1968 10
18个常用的强化学习算法整理:从基础方法到高级模型的理论技术与代码实现
|
7月前
|
存储 监控 算法
内网监控桌面与 PHP 哈希算法:从数据追踪到行为审计的技术解析
本文探讨了内网监控桌面系统的技术需求与数据结构选型,重点分析了哈希算法在企业内网安全管理中的应用。通过PHP语言实现的SHA-256算法,可有效支持软件准入控制、数据传输审计及操作日志存证等功能。文章还介绍了性能优化策略(如分块哈希计算和并行处理)与安全增强措施(如盐值强化和动态更新),并展望了哈希算法在图像处理、网络流量分析等领域的扩展应用。最终强调了构建完整内网安全闭环的重要性,为企业数字资产保护提供技术支撑。
203 2
|
8月前
|
存储 监控 算法
基于 Python 哈希表算法的局域网网络监控工具:实现高效数据管理的核心技术
在当下数字化办公的环境中,局域网网络监控工具已成为保障企业网络安全、确保其高效运行的核心手段。此类工具通过对网络数据的收集、分析与管理,赋予企业实时洞察网络活动的能力。而在其运行机制背后,数据结构与算法发挥着关键作用。本文聚焦于 PHP 语言中的哈希表算法,深入探究其在局域网网络监控工具中的应用方式及所具备的优势。
260 7
|
8月前
|
运维 监控 算法
基于 Python 迪杰斯特拉算法的局域网计算机监控技术探究
信息技术高速演进的当下,局域网计算机监控对于保障企业网络安全、优化资源配置以及提升整体运行效能具有关键意义。通过实时监测网络状态、追踪计算机活动,企业得以及时察觉潜在风险并采取相应举措。在这一复杂的监控体系背后,数据结构与算法发挥着不可或缺的作用。本文将聚焦于迪杰斯特拉(Dijkstra)算法,深入探究其在局域网计算机监控中的应用,并借助 Python 代码示例予以详细阐释。
201 6
|
9月前
|
人工智能 监控 算法
Python下的毫秒级延迟RTSP|RTMP播放器技术探究和AI视觉算法对接
本文深入解析了基于Python实现的RTSP/RTMP播放器,探讨其代码结构、实现原理及优化策略。播放器通过大牛直播SDK提供的接口,支持低延迟播放,适用于实时监控、视频会议和智能分析等场景。文章详细介绍了播放控制、硬件解码、录像与截图功能,并分析了回调机制和UI设计。此外,还讨论了性能优化方法(如硬件加速、异步处理)和功能扩展(如音量调节、多格式支持)。针对AI视觉算法对接,文章提供了YUV/RGB数据处理示例,便于开发者在Python环境下进行算法集成。最终,播放器凭借低延迟、高兼容性和灵活扩展性,为实时交互场景提供了高效解决方案。
624 5

热门文章

最新文章