目录
输入
输出
解释
示例
首页 后端开发 C++ 将给定二叉搜索树中的所有较大值添加到每个节点上

将给定二叉搜索树中的所有较大值添加到每个节点上

Sep 07, 2023 pm 12:17 PM
节点 二叉搜索树 较大值

将给定二叉搜索树中的所有较大值添加到每个节点上

BST或二叉搜索树是一种二叉树形式,其中所有左节点的值小于根节点的值,所有右节点的值大于根节点的值。对于这个问题,我们将取一个二叉树并将所有大于当前节点值的值添加到它中。问题“向BST的每个节点添加所有较大的值”被简化为对于BST,将所有大于当前节点值的节点值添加到该节点值。

向BST中的每个节点添加所有较大的值问题陈述:

给定一个二叉搜索树(BST),我们需要为每个节点添加所有较大值节点的总和。

输入

    10
    /  \
   /    \
  5     20
 / \   / \
1   7   1  5
登录后复制

输出

      70
    /   \
   82   45
  / \   / \
83 77  60 25
登录后复制

解释

这个程序将把一个二叉搜索树转换为一个二叉树,其中节点的值为所有较大元素的和加上节点的原始值。

将所有较大的值添加到二叉搜索树解决方案中的每个节点:

我们使用逆向中序遍历(先递归调用右子树而不是左子树),并维护一个变量来存储到目前为止已经遍历过的节点的和。

然后,我们使用这个和来修改当前节点的值,首先将其值加到和上,然后用这个和替换节点的值。

示例

#include <iostream >
using namespace std;
struct node {
   int data;
   node *left;
   node *right;
};
node *newNode(int key) {
   node *temp=new node;
   temp->left=NULL;
   temp->right=NULL;
   temp->data=key;
   return temp;
}
void Inorder(node *root) {
   if(!root)
      return;
   Inorder(root->left);
   cout<<root->data<<" ";
   Inorder(root->right);
}
node *Insert(node *root,int key) {
   if(!root)
      return newNode(key);
   if(key<root->data)
      root->left=Insert(root->left,key);
   else
      root->right=Insert(root->right,key);
   return root;
}
void RevInorderAdd(node *root,int &sum) {
   if(!root)
      return;
   RevInorderAdd(root->right,sum);
   sum+=root->data;
   root->data=sum;
   RevInorderAdd(root->left,sum);
}
void AddGreater(node *root) {
   int sum=0;
   RevInorderAdd(root,sum);
}
int main() {
   /* Let us create following BST
      10
      / \
     5   20
    / \  / \
  1  7 15 25 */
   node *root = NULL;
   root = Insert(root, 10);
   Insert(root, 20);
   Insert(root, 25);
   Insert(root, 15);
   Insert(root, 5);
   Insert(root, 7);
   Insert(root, 1);
   Inorder(root);
   cout<<endl;
   AddGreater(root);
   Inorder(root);
   cout<<endl;
   return 0;
}
登录后复制

以上是将给定二叉搜索树中的所有较大值添加到每个节点上的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

查询从节点X开始,距离最多为D的子树中的最小权重 查询从节点X开始,距离最多为D的子树中的最小权重 Aug 25, 2023 am 11:25 AM

在进行计算机编程时,有时需要求出源自特定节点的子树的最小权重,条件是该子树不能包含距离指定节点超过D个单位的节点。这个问题出现在各个领域和应用中,包括图论、基于树的算法和网络优化。子树是较大树结构的子集,指定的节点作为子树的根节点。子树包含根节点的所有后代及其连接边。节点的权重是指分配给该节点的特定值,可以表示其重要性、重要性或其他相关指标。在这个问题中,目标是找到子树中所有节点中的最小权重,同时将子树限制在距离根节点最多D个单位的节点。在下面的文章中,我们将深入研究从子树中挖掘最小权重的复杂性

使用队列反转二叉搜索树中的路径的C++代码 使用队列反转二叉搜索树中的路径的C++代码 Sep 14, 2023 pm 07:21 PM

例如,给定一个二叉搜索树,我们需要从特定键反转其路径。寻找解决方案的方法在这种方法中,我们将创建一个队列并推送所有节点,直到获得根节点。p>示例 #include<bits/stdc++.h>usingnamespacestd;structnode{  intkey;  structnode*left,*right;};structnode*newNode(intitem){&nb

如何通过Vue和jsmind实现思维导图的节点复制和剪切功能? 如何通过Vue和jsmind实现思维导图的节点复制和剪切功能? Aug 15, 2023 pm 05:57 PM

如何通过Vue和jsmind实现思维导图的节点复制和剪切功能?思维导图是一种常见的思维工具,能够帮助我们整理思路、梳理思维逻辑。而节点复制和剪切功能是思维导图中常用的操作,能让我们更方便地重复利用已有的节点,提高思维整理的效率。在本文中,我们将使用Vue和jsmind这两个工具来实现思维导图的节点复制和剪切功能。首先,我们需要安装Vue和jsmind,并创建

Python中如何实现二叉搜索树 Python中如何实现二叉搜索树 Jun 10, 2023 am 08:57 AM

二叉搜索树(BinarySearchTree,BST)是一种基于二叉树的搜索算法。它的特点是在树中每个节点的左子树中的值都小于这个节点的值,而右子树中的值则大于这个节点的值。因此,BST的搜索和插入操作的时间复杂度是O(logN)。在Python中实现二叉搜索树的方法比较简单,因为Python内置了列表和字典这两种数据结构,它们都可以用来实现二叉树。在这

C++中的二叉堆和二叉搜索树 C++中的二叉堆和二叉搜索树 Aug 22, 2023 pm 04:10 PM

在C++编程中,二叉堆和二叉搜索树是两种常用的数据结构,它们具有相似之处,但是也有着不同点。本文将分别介绍二叉堆和二叉搜索树的概念、基本操作及其应用场景。一、二叉堆1.1概念二叉堆是一种完全二叉树,满足以下两种性质:1.1.1堆序性堆序性指在一个二叉堆中,每个节点的值都不大于(或不小于)其父节点的值。这里以最大堆为例,即根节点的值是整个树中最大的值,而

js删除节点的方法是什么 js删除节点的方法是什么 Sep 01, 2023 pm 05:00 PM

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

使用弗洛伊德-沃沙尔算法找到任意两个节点之间的最短路径 使用弗洛伊德-沃沙尔算法找到任意两个节点之间的最短路径 Sep 20, 2023 pm 02:21 PM

C++有一个宏,它被定义为一段代码或期望的值,并且每当用户需要时,它将被重复使用。弗洛伊德-沃尔夏尔算法是在给定的加权图中找到所有顶点对之间最短路径的过程。该算法遵循动态规划的方法来找到最小权重图。让我们通过图表来理解弗洛伊德-沃尔夏尔算法的含义-以顶点1为源,顶点4为目的地,求它们之间的最短路径。我们已经看到有两条路径可以连接到目标顶点4。1->4–边的权重为51->8->3->4–边权重(1+2+1)为4。在给定的图I中,我们看到两个顶点之间连接的最小边。所以这里顶点

Java利用Math类的max()函数获取两个数中的较大值 Java利用Math类的max()函数获取两个数中的较大值 Jul 24, 2023 pm 11:17 PM

Java利用Math类的max()函数获取两个数中的较大值在Java编程中,我们经常需要比较两个数的大小,然后选择较大的数进行一些操作。Java中的Math类提供了许多数学运算的函数,其中max()函数可以帮助我们获取两个数中的较大值。Math.max()函数的定义如下:publicstaticintmax(inta,intb)该函数接受两个整数

See all articles