给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。

例如:

输入: 原始二叉搜索树:
              5
            /   \
           2     13

输出: 转换为累加树:
             18
            /   \
          20     13

 思路1:没有看清题意是二叉搜索树,尴尬,算了~先贴上没有考虑搜索树的笨方法把,先把数节点的值都拿出来,然后遍历树的节点,求比当前节点值大的数值和

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:vector<int> treeVal;TreeNode* convertBST(TreeNode* root) {if(root==NULL)return NULL;extractVal(root);int n = treeVal.size();resetVal(root,n);return root;}void resetVal(TreeNode* root,int n){if(root==NULL)return;resetVal(root->left,n);int sum = root->val;for(int i=0;i<n;++i){sum+=(treeVal[i]>root->val?treeVal[i]:0);}root->val = sum;resetVal(root->right,n);}void extractVal(TreeNode* root){if(root==NULL)return;extractVal(root->left);treeVal.push_back(root->val);extractVal(root->right);}
};

思路二:反序中序遍历,即先遍历右子树,再根节点,后左节点,这样充分利用二叉搜索树特性,遍历又大往小,一路求和即可

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:int sum = 0;TreeNode* convertBST(TreeNode* root) {if(root==NULL)return NULL;convertBST(root->right);sum += root->val;root->val = sum;convertBST(root->left);return root;}
};

把二叉搜索树转换为累加树—leetcode538相关推荐

  1. 【数据结构与算法】之深入解析“把二叉搜索树转换为累加树”和“从二叉搜索树到更大和树”的求解思路与算法示例

    一.题目要求 ① 把二叉搜索树转换为累加树 给出二叉搜索树的根节点,该树的节点值各不相同,请将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 no ...

  2. [二叉树遍历|BST]leetcode 538 把二叉搜索树转换为累加树

    [二叉树遍历|BST]leetcode 538 把二叉搜索树转换为累加树 1.题目 题目链接 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree) ...

  3. leetcode c++未初始化_LeetCode 力扣官方题解 | 538. 把二叉搜索树转换为累加树

    力扣 538. 把二叉搜索树转换为累加树(点击查看题目) 力扣​leetcode-cn.com 题目描述 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater ...

  4. Suzy找到实习了吗 Day23 | 二叉树最后一节!669. 修剪二叉搜索树,108. 将有序数组转换为二叉搜索树,538. 把二叉搜索树转换为累加树

    669. 修剪二叉搜索树 题目 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high.通过修剪二叉搜索树,使得所有节点的值在[low, high]中.修剪树 不应该 改变保 ...

  5. Leetcode 538. 把二叉搜索树转换为累加树 C++

    Leetcode 538. 把二叉搜索树转换为累加树 题目 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加 ...

  6. LeetCode 538. 把二叉搜索树转换为累加树 | Python

    538. 把二叉搜索树转换为累加树 题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/convert-bst-to-greater-tree 题目 给 ...

  7. LeetCode 力扣 538. 把二叉搜索树转换为累加树 convertBstToGreaterTree538树

    大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 538. 把二叉搜索树转换为累 ...

  8. 538. 把二叉搜索树转换为累加树(java)

    538. 把二叉搜索树转换为累加树 题目描述 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的 ...

  9. 力扣538.把二叉搜索树转换为累加树

    题目来源: 538.把二叉搜索树转换为累加树 题目: 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中 ...

最新文章

  1. centos6上以二进制方式安装mariadb5.5
  2. Apache服务器和tomcat服务器有什么区别?
  3. 企业网站建设量身定做的三项基本要素
  4. centos c++ 找不到头文件mysql.h
  5. 快速了解和使用Photon Server
  6. BugKuCTF 加密 ok
  7. 心得 如何优雅地跨线程修改主线程窗口控件
  8. IIS7 设置 UrlRewrite
  9. python 中主线程结束 子线程还在运行么_「干货」python线程笔记
  10. 高薪、稀缺人才必备哪些技能?BDTC大会告诉你,附最新议程!
  11. 一张图11招学会Python网络黑客
  12. android studio链接海马玩模拟器
  13. 计算机中sumif函数的使用方法,WPS表格的sumif函数用法与模糊条件使用方法
  14. 蚂蚁金服是不是中国最好的 FinTech(金融科技)公司
  15. android设备内部添加apn信息
  16. esc键退出全屏 vue_vue项目实现全屏,退出全屏,图标切换的解决方案
  17. 移动磁盘显示无法访问设备未就绪,里面的资料如何找到
  18. Laravel本地Sail开发环境下Phpstorm+浏览器+Postman调试配置
  19. 一生的读书计划——影响中国历史进程的中国名人
  20. mysql分布式主键_技术分享 | 优化 InnoDB 的主键

热门文章

  1. PHP通过__call实现简单的AOP(主事务后的其他操作)比如前置通知,后置通知
  2. 《程序猿的呐喊》读书笔记(下)
  3. HTML的语义化,你需要深入了解
  4. SharePoint 2013 InfoPath 无法保存下列表单
  5. 我们都是和自己赛跑的人
  6. pikachu漏洞靶机之xss漏洞post提交方式
  7. linux 递归删除 空目录命令,使用shell脚本实现递归删除空目录
  8. iOS之深入解析CocoaPods的GitLab CI与组件自动化构建与发布
  9. marked Options
  10. 教你用100多行写一个数据库(附源码)