题解来自labuladong。

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

解决的疑惑:为什么k不用置零?是如何通过二叉树的降序遍历逐个对结点的值进行改变的?

用的是排序二叉树的降序遍历,这样可以按算出来每个节点应有的值。

后序遍历是一开始先走到最右的节点,k加上最大的节点值,因为这个节点是值最大的节点,没有比它值更大的节点所以它最后的值就是自己本身。

然后就是回退过程,回退到可以执行k+=val的节点,此时这个节点一定比刚才的节点小,那么在这个基础上k再加上自己的值作为当前节点新的值,其他节点可想而知一定又比现在的值小,那么当前节点最终的值就确定了,以此类推其他过程。

由于是降序遍历,所以对于每个节点来说,走到它这一步的时候,k一定已经加好了之前所有比它大的值了,所以k无需置零,一路走过来就可以了。

538.把二叉搜索树转换为累加树(结合自己的理解解释一下别人题解的递归部分)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. LeetCode系列538—把二叉搜索树转换为累加树

    题意 538. 把二叉搜索树转换为累加树 题解 方法一:反序中序遍历 class Solution {private:int sum = 0; public:TreeNode* convertBST( ...

  10. leetcode 538. 把二叉搜索树转换为累加树 思考分析

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

最新文章

  1. 使用 ASP+ DataGrid 控件来创建主视图/详细资料视图
  2. 【摩天好课推荐】传统企业数字化转型的困惑、思考与实践
  3. Redis数据类型操作(五) —— Sorted Set
  4. 《每日一题》842. Split Array into Fibonacci Sequence 将数组拆分成斐波那契序列
  5. 如何使用 Entity Framework 的 DbContext
  6. android log.d 格式化,android – 在我的代码中使用Log.d()或Log.e()
  7. [Ctsc2014]企鹅QQ
  8. Direct3D学习_绘制
  9. 波卡生态预言机ROOM上线Uniswap,最高涨幅达862%
  10. SAP License:最近收到的信(审计人员关于成本问题的请教)
  11. 181222每日一句
  12. 七人表决器VHDL语言
  13. 医院医疗类报表免费用,提反馈,还能赢取P30!
  14. 刘强东学习亚马逊:控制供应链 技术是最大障碍
  15. 嵌入式系统开发笔记10:CJ/T-188 水表协议解析2
  16. 用 dfuse `transaction_lifecycle` 端点跟踪任何交易,包括延期交易
  17. ThinkPHP实现定时执行任务的两种方法
  18. Can#39;t locate Tk.pm
  19. amap 高德 地图打点 地图描点 描点居中 清除打点
  20. 安卓手机连接IP100蓝牙打印机实现打印功能

热门文章

  1. java中calendarr_Java端获取当前时间的前12个小时
  2. java中socket类_Java中的Socket的用法
  3. 【Java 多线程】互斥锁,自旋锁和读写锁
  4. java 实例 登录用户 equals的用法
  5. Android 控制ScrollView滚动到底部
  6. 团队开发——个人工作总结01
  7. applicationContext.xml文件配置模板
  8. 学习mfc的一些方法
  9. Mr.J-- jQuery学习笔记(二十)--节点操作方法
  10. sqlserver创建程序集