使用C++实现删除所有不在任何路径上且路径和小于k的节点

使用c++实现删除所有不在任何路径上且路径和小于k的节点

在这个问题中,我们有一个二叉树,其从根节点到叶节点的路径是完全定义的。从根节点到叶子节点的所有节点之和必须大于或等于k。所以我们需要删除路径中总和小于k的所有节点。这里要记住的重要一点是,一个节点可能是许多路径的一部分,因此只有当所有路径的总和

从根节点到叶节点,我们可以计算总和。当节点的递归调用完成并且控制返回时,我们可以检查左路径和右路径的总和是否

假设我们有 150 K 和一棵这样的树 –

      10      /      20 30    /   /    5 35 40 45   /  /   50 55 60 65  /     / /  70 80 90 100

登录后复制

如果我们看到路径 root->left->left 的总和为 10 + 20 + 5,即 25,小于 150,我们需要对其进行修剪并删除 5。之后,让我们评估 10- >30->40。它小于150,所以删除40。现在我们看到另一条路径10->20->35->50,总和115小于150,所以我们删除50。现在我们剩下的路径是

立即学习“C++免费学习笔记(深入)”;

10->20->35->55->70 ;10->20->35->55->80 ;10->30->45->60->90 ;10->30->45->65->100 ;

登录后复制

所有路径的总和大于150,因此我们不需要再修剪。

示例

#include using namespace std;class Node {   public:   int value;   Node *left, *right;   Node(int value) {      this->value = value;      left = right = NULL;   }};Node* removeNodesWithPathSumLessThanK(Node* root, int k, int& sum) {   if(root == NULL) return NULL;   int leftSum, rightSum;   leftSum = rightSum = sum + root->value;   root->left = removeNodesWithPathSumLessThanK(root->left, k, leftSum);   root->right = removeNodesWithPathSumLessThanK(root->right, k, rightSum);   sum = max(leftSum, rightSum);   if(sum left);      cout value right);   }}int main() {   int k = 150;   Node* root = new Node(10);   root->left = new Node(20);   root->right = new Node(30);   root->left->left = new Node(5);   root->left->right = new Node(35);   root->right->left = new Node(40);   root->right->right = new Node(45);   root->left->right->left = new Node(50);   root->left->right->right = new Node(55);   root->right->right->left = new Node(60);   root->right->right->right = new Node(65);   root->left->right->right->left = new Node(70);   root->left->right->right->right = new Node(80);   root->right->right->left->left = new Node(90);   root->right->right->right->left = new Node(100);   int sum = 0;   cout 

输出

Inorder tree before: 5 20 50 35 70 55 80 10 40 30 90 60 45 100 65Inorder tree after: 20 35 70 55 80 10 30 90 60 45 100 65

登录后复制

我们完全修剪后的树 -

         10         /       20 30               35 45        /     55  60 65    /   /  /  70 80 90 100

登录后复制

结论

正如我们所看到的,在初始观察之后,我们可以应用 DFS 并在递归函数从每次调用返回时通过计算该节点的总和来删除节点。总的来说,这是一个简单的观察和方法论问题。

以上就是使用C++实现删除所有不在任何路径上且路径和小于k的节点的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2583927.html

(0)
上一篇 2025年3月6日 14:41:34
下一篇 2025年2月27日 14:50:05

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 检查给定的图中两个节点之间的路径是否表示最短路径

    要检查图表的两个中心之间的给定路径是否符合最短路径,可以通过使用可靠的最短路径将沿给定路径的整个边缘权重与相同中心组合之间的最短距离进行比较方式计算,例如 Dijkstra 计算或 Floyd−Warshall 计算。如果给定路径上的所有边…

    2025年3月6日
    200
  • C++程序以移除不满足路径和大于等于k的节点

    在这个问题中,我们有一个二叉树,其从根节点到叶节点的路径是完全定义的。从根节点到叶节点的所有节点的总和必须大于或等于常数值 k。因此,我们需要删除那些总和小于 k 的路径中的所有节点,这样树中剩下的路径将大于 k。这里要记住的重要一点是,一…

    2025年3月6日
    200
  • 如何覆盖C++中的分支和路径?

    在 c++++ 中覆盖分支和路径可有效确保代码全面测试。方法包括:使用 google test 等覆盖率框架。利用 gcc 和 clang 编译器的 -ftest-coverage 覆盖率标志。通过 gcov 和 lcov 代码插桩库检测执…

    2025年3月6日
    200
  • ASP.NET MVC 中关于路径这个问题

    很多人在写代码的时候关于路径这个问题很头疼,其实路径是很简单的,只是没人帮我们点投!初次学习程序的人,我相信肯定会遇到和我一样的问题,比如说,“/”和“~”引用路劲的区别,接下来看吧,这篇文章肯定会将你点透的,看完这篇文章你一定会有一种山重…

    编程技术 2025年3月3日
    200
  • 使用filepath.Join函数将多个路径片段组合成一个路径

    使用filepath.join函数将多个路径片段组合成一个路径 在Go语言的标准库中,有一个名为filepath的包,提供了一些用于操作文件路径的函数。其中,Join函数是一个非常有用的函数,可以将多个路径片段组合成一个路径。 filepa…

    编程技术 2025年3月2日
    200
  • 使用os.Getwd函数获取当前工作目录的路径

    获取当前工作目录的路径是在编程过程中经常使用的一个功能。在go语言中,可以使用os包中的getwd函数来获取当前工作目录的路径。本文将为大家介绍如何使用os.getwd函数,并提供相应的代码示例。 在开始之前,我们先来了解一下什么是工作目录…

    编程技术 2025年3月2日
    200
  • 使用path/filepath.Dir函数获取文件路径的目录部分

    使用path/filepath.dir函数获取文件路径的目录部分 在我们的日常开发过程中,经常会涉及到文件路径的处理。有时候,我们需要获取文件路径的目录部分,即文件所在文件夹的路径。在Go语言中,可以使用path/filepath包提供的D…

    编程技术 2025年3月2日
    200
  • Golang安装位置解析:选定最佳安装路径

    Golang是一门越来越受欢迎的编程语言,对于许多开发人员来说,选择最佳的安装路径是至关重要的。本文将深入探讨Golang的安装位置,并给出具体的代码示例,帮助读者更好地理解如何选择最佳的安装路径。 一、Golang的安装位置 在安装Gol…

    2025年3月1日
    200
  • Go语言的开源之路

    标题:Go语言的开源之路 在当今信息化的时代,编程语言的发展日新月异。Go语言(英文名为Golang)作为一门由谷歌公司开发的编程语言,在近年来崭露头角,备受程序员们的关注与青睐。Go语言以其简洁、高效、易用等特点,逐渐成为了众多开发者的首…

    2025年3月1日
    200
  • 斜杠和反斜杠在文件路径中的不同使用

    文件路径是操作系统中用于识别和定位文件或文件夹的字符串。在文件路径中,常见的有两种符号分隔路径,即正斜杠(/)和反斜杠()。这两个符号在不同的操作系统中有不同的使用方式和含义。 正斜杠(/)是Unix和Linux系统中常用的路径分隔符。在这…

    互联网 2025年2月27日
    200

发表回复

登录后才能评论