首页 > 后端开发 > C++ > 正文

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

WBOY
发布: 2023-09-07 12:17:04
转载
1286人浏览过

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

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

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

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

输入

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

输出

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

解释

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

纳米搜索
纳米搜索

纳米搜索:360推出的新一代AI搜索引擎

纳米搜索 30
查看详情 纳米搜索

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

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

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

示例

#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中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:tutorialspoint网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号