现在有一个二叉树, 父节点保存子节点字符总长度。

现在有一个二叉树, 父节点保存子节点字符总长度。 typedef struct Node{ char *data; struct Node* left; struct Node* rigth; int length; }Node,*tree; 写一个求substring的功能。 Now, if we call substring with lower idx=2 and upper idx=7, the first part can be fully reused (i.e. "llo"), but the second part "wo" is not an existing cord. Therefore, we would have to create a new cord with this string and then wire that as the blue Cord's right node, as shown in the diagram: 如果子串在整好是在某几个节点上,哪指针直接指在这些节点上,如果此节点上只有部分则需要重新建立新的节点,然后再指向。 求子串的这个函数,返回的还是一个二叉树。如果节点是叶子节点,长度保存的就是字符串的长度。如果节点有子孩子,那么 data就指向空。然后长度是两个孩子里length的和

#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef struct Node {char *data;struct Node *left;struct Node *right;int length;
} Node, *Tree;// 创建新节点
Node *createNode(char *data, int length) {Node *newNode = (Node *)malloc(sizeof(Node));newNode->data = data;newNode->left = NULL;newNode->right = NULL;newNode->length = length;return newNode;
}// 释放二叉树的内存
void freeTree(Tree root) {if (root == NULL) {return;}freeTree(root->left);freeTree(root->right);if (root->data != NULL) {free(root->data);}free(root);
}// 辅助函数,根据指定范围在字符串中创建新的子串
char *substring(char *str, int lower, int upper) {int len = upper - lower;char *sub = (char *)malloc((len + 1) * sizeof(char));strncpy(sub, str + lower, len);sub[len] = '\0';return sub;
}// 递归函数,根据指定范围在二叉树中查找子串,并返回一个新的二叉树
Tree findSubstring(Tree root, int lower, int upper) {if (root == NULL || lower < 0 || lower >= upper || upper > root->length) {return NULL;}// 如果当前节点保存的字符串刚好是子串的范围,则直接返回该节点if (lower == 0 && upper == root->length) {return root;}// 如果子串在当前节点的左子树中if (lower < root->left->length) {// 如果子串在左子树的末尾if (upper <= root->left->length) {return findSubstring(root->left, lower, upper);}// 子串跨越了左右子树的边界else {char *rightSub = substring(root->data, root->left->length, upper);Node *rightNode = createNode(rightSub, upper - root->left->length);rightNode->right = findSubstring(root->right, 0, upper - root->left->length);return rightNode;}}// 子串在当前节点的右子树中else {return findSubstring(root->right, lower - root->left->length, upper - root->left->length);}
}int main() {// 创建示例二叉树char *data = "Hello, world!";Tree leftChild = createNode("Hello, ", 7);Tree rightChild = createNode("world!", 6);Tree root = createNode(NULL, 13);root->left = leftChild;root->right = rightChild;// 调用findSubstring函数查找子串并返回一个新的二叉树Tree newTree = findSubstring(root, 2, 7);// 打印新的二叉树printf("New tree after substring: %s\n", newTree->data);// 释放内存freeTree(root);free(newTree->data);free(newTree);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/815982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SERVERLESS】AWS Lambda上实操

通过Serverless的发展历程及带给我们的挑战&#xff0c;引出我们改如何改变思路&#xff0c;化繁为简&#xff0c;趋利避害&#xff0c;更好的利用其优势&#xff0c;来释放企业效能&#xff0c;为创造带来无限可能。 一 Serverless概述 无服务器计算近年来与云原生计算都是在…

OSPF星型拓扑和MGRE全连

一&#xff0c;拓扑 二&#xff0c;要求 1&#xff0c;R6为ISP只能配置IP地址&#xff0c;R1-R5的环回为私有网段 2&#xff0c;R1/4/5为全连的MGRE结构&#xff0c;R1/2/3为星型的拓扑结构&#xff0c; 3&#xff0c;R1为中心站点所有私有网段可以互相通讯&#xff0c;私有网段…

antd+vue——datepicker日期控件——禁用日期功能

需求&#xff1a;今天之前的日期禁用 <a-date-pickerv-model.trim"formNE.deliveryTime":disabled-date"disabledDate"valueFormat"YYYY-MM-DD"allowClearstyle"width: 100%" />禁用日期的范围&#xff1a; //时间范围 disab…

第14届java A组蓝桥杯做题记录

A题 特殊日期 package Java14省赛.Java研究生组;import java.time.Year; //特殊判断一下2月份&#xff0c;leaf 为true 1 import java.util.*;import 蓝桥杯.dfs_n皇后; public class 特殊日期 {static int sum(int d){int res 0;while(d > 0){res d % 10;d / 10;}return…

Java GC了解

Jstack找到线程的快照 jvm提供其他命令作用 jps&#xff1a; 虚拟机进程状况工具&#xff0c;类似linux的ps命令 jstat&#xff1a;虚拟机统计信息监视工具&#xff0c;经常看gc情况的会使用到 jinfo: java配置信息工具 jmap&#xff1a; java内存映射工具&#xff0c;dump&am…

微服务篇面试题

1、SpringCloud的组件有哪些&#xff1f; 2、负载均衡如何实现&#xff1f; 3、什么是服务雪崩&#xff1f;怎么解决&#xff1f; 4、项目中有没有做过限流&#xff1f; Tomcat单体可以&#xff0c;分布式不适合 5、解释一下CAP和BASE P&#xff1a;加入node03这边的网络断了&a…

基于PCIe的智能处理系统研究

引言 人工智能是集合众多方向的综合性学科,在诸多应用领域均取得了显著成果。随着航空领域人工智能技术研究的不断深入,面向开放式机载智能交互场景,人工智能的应用可解决诸多问题。例如智能感知、辅助决策等,可利用人工智能算法对多源传感器捕获的海量信息进行快速处理,仅将处…

Go语言异常处理方式

Go 语言没有传统的异常处理机制&#xff0c;如 Java、C 或 Python 中的 try-catch 语句。取而代之&#xff0c;Go 采用了基于返回错误值和 panic/recover 机制的混合模式来进行错误处理。以下是 Go 语言中处理异常&#xff08;或称错误&#xff09;的两种主要方式&#xff1a; …

【8086汇编】汇编语言基础入门

文章目录 一、汇编简介1. 汇编语言的组成2. CPU、寄存器、内存3. CPU对存储器的读写4. 拓展5. 检测6. 解析 二、寄存器1. mov、add命令2. 物理地址3. CS:IP 装段地址和偏移地址3.1 如何改变CS:IP的值 4. 数据段DS:[address]4.1 前置知识&#xff1a;字与字节4.2 DS:[address] 5…

[EFI]Z420电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 Hewlett Packard Z420 Workstation处理器Intel Xeon E5-1650v2已驱动内存8GB 2133MHz DDR4 * 2已驱动硬盘闪迪 1T M.2 NVMe SSD已驱动显卡RX 480已驱动声卡ALC已驱动网卡Intel Ethernet Connection I219-V无线网卡蓝牙博通 BCM94360Z4 已驱动 支持系统版本…

整数在内存中的存储和内存操作函数

目录 整数在内存中的存储1. 整数在内存中的存储2. 大小端字节序和字节序判断2.1 什么是大小端?2.2 为什么有大小端 3. 练习3.1 请简述大端字节序和小端字节序的概念&#xff0c;设计⼀个小程序来判断当前机器的字节序。&#xff08;10分&#xff09;-百度笔试题3.2 练习23.3 练…

每日三道面试题之 Java并发编程 (三)

1.什么是上下文切换? 在Java线程知识中&#xff0c;上下文切换是指操作系统在多任务环境下&#xff0c;为了实现多任务的并行执行&#xff0c;需要在运行一个任务&#xff08;如一个线程或进程&#xff09;时切换到另一个任务运行的过程。上下文切换是多任务操作系统的核心特…

java:特殊文件(properties,xml)和日志

特殊文件 txt(文本文件) txt文件是一种纯文本文件,用于存储文本信息 优缺点:txt文件简单易用,可以使用任何文本编辑器打开和编辑,但不支持数据类型和结构,所有信息均用纯文本形式保存 适合简单的配置信息存储 properties文件 properties文件是一种键值对文件,用于存储配置…

从零自制docker-10-【cgroup进行容器资源限制】

文章目录 目的导入包的相关公开原则当前进程的挂载信息deferfor scanner.Scan()判断字符串包含新建的cgroup的默认文件cpu相关配置对应到ubuntu 22.04版本的cpu相关配置top注意查看你可使用的cpu注意坑启动后的top查看显示进程使用的cpu序号代码结果 目的 启动容器时通过-mem、…

《每天十分钟》-红宝书第4版-对象、类与面向对象编程(七)

类 之前的几个继承模式&#xff0c;只使用 ECMAScript 5 的特性来模拟类似于类&#xff08;class-like&#xff09;的行为。不难看出&#xff0c;各种策略都有自己的问题&#xff0c;也有相应的妥协&#xff0c;而且代码又丑又长。 为了解决这些问题&#xff0c;ECMAScript 6 …

JAVA集合(学习)

1.Java集合框架体系图 集合框架Collection单列集合List 有序&#xff0c;可重复Vector 数组结构&#xff0c;线程安全ArrayList 数组结构&#xff0c;非线程安全LinkedList 链表结构&#xff0c;非线程安全Set 无序&#xff0c;唯一HashSet 哈希表结构LinkedHashSet 哈希表…

Spring Bean作用域

Sping中bean的scope的值可以是singleton、prototype、request、session、global session。默认情况下是singleton。只有在web容器中才能使用request、session、global session。 singleton:单例模式,spring容器中有且仅有一个对象,init方法在创建容器时仅执行一次。关闭容器…

简单几步启用Ubuntu root用户密码登录

Ubuntu默认登录用户为ubuntu&#xff0c;且禁用了root用户使用密码方式登录。 若要开起root用户登录&#xff0c;只需要以下几步&#xff1a; 1.使用ubuntu用户登录Linux服务器。 2.使用sudo修改root用户密码。 sudo passwd root 输入新设置的root用户密码&#xff0c;此时…

Mac下Homebrew更新国内源brew update卡死(完美解决)

先更新下brew 有时brew版本太旧也会有问题 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 再更新国内源 #更新Homebrew cd "$(brew --repo)" git remote set-url origin https://mirrors.ustc…

jvisualVM分析jvm内存使用快照dump

服务发生内存溢出&#xff0c;就需要查看服务器上Java服务的jvm堆内存使用情况&#xff0c;可以使用dump命令生成dump文件&#xff0c;然后下载到本地&#xff0c;然后使用jvisualVM工具打开&#xff0c;即可实现可视化分析。 生成dump文件常用的两种方式&#xff1a; 第一种…