给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。(二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。)

例如:

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-bst-to-greater-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一:递归算法

/*** 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 {private:int sum = 0;  # 用于存储大于当前节点的其它点的总和
public:TreeNode* convertBST(TreeNode* root) {if(root!=NULL){convertBST(root->right);  # 反中序遍历,先找最右边的点sum = sum + root->val;  # 使用sum统计总和的值root->val = sum;  # 更新当前点的值convertBST(root->left);  # 再遍历左子树的节点}return root;  # 返回根节点}
};

解法二:迭代法,使用栈,不断迭代,将右子树的节点不断放进堆栈中,每遍历完一个右子节点,通过父节点找到左子树节点进行遍历。

/*** 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:TreeNode* convertBST(TreeNode* root) {int sum = 0;  # 用于统计比当前节点值大的所有点的值总和TreeNode* rt = root;  # 用于遍历所有节点stack<TreeNode*> stk;  # 建立一个栈,不断将节点压进堆栈中while(!stk.empty()|| rt != NULL)  # 迭代结束的条件是栈为空同时当前节点指向的值为null{while(rt != NULL)  # 当当前节点不为NULL{stk.push(rt);  # 寻找当前节点的右子树rt = rt->right;  # 遍历当前节点的右子树}rt = stk.top();  # 当遍历完所有的右子树,开始从栈最顶层开始计算sum += rt->val;rt->val = sum;stk.pop();rt = rt->left;}return root;}
};

leetcode - 538. 把二叉搜索树转换为累加树相关推荐

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

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

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

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

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

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

  4. LeetCode 538. 把二叉搜索树转换为累加树(逆中序 根右左)

    文章目录 1. 题目 2. 逆中序(根右左,降序循环遍历) 1. 题目 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原 ...

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

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

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

    思路:ST的中序遍历就是从小到大,那么反过来就是从大到小,然后通过num累加  int num =0;public TreeNode convertBST(TreeNode root) {if(roo ...

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

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

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

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

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

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

最新文章

  1. 微信小程序模板template
  2. 实例讲解UML建模分析与设计
  3. html5 input required oninvalid,为什么我的“ oninvalid”属性会让模式失败?
  4. 14工厂方法模式(Factory Method)
  5. python ascii转字符串_Python将混合ASCII代码转换为字符串
  6. 人力资源学python有意义吗-给还准备继续做HR的人提个醒!
  7. 官方AI语音系统电销机器人系统搭建|AI智能|电话机器人源码|2022最新电销外呼系统《各版本机器人部署》
  8. 马尔科夫模型 Markov Model
  9. Chrome源码chromium下载编译详细步骤
  10. JavaScript系列-闭包
  11. MySql 报错1548
  12. 中国大学MOOC|C语言程序设计(浙江大学翁恺)|习题与解答
  13. 酒友app软件开源平台
  14. 科技云报道:安全脱管不如托管
  15. 数据结构习题集之魔王语言解释
  16. SOUI中屏蔽右键菜单
  17. Linux上的音频驱动及wineASIO与foobar2000
  18. colt python 357magnum_357磁(357 Magnum)——欧美十佳手枪
  19. JAVA异常实验:车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品
  20. 原创 | 新基建浪潮下,看科技巨头如何抢占先机

热门文章

  1. 前端面试:你应该了解的JS算法相关的知识
  2. Serverless实战 —— 函数计算如何访问 MySQL 数据库
  3. 面试官系统精讲Java源码及大厂真题 - 44 场景实战:ThreadLocal 在上下文传值场景下的实践
  4. 容器编排技术 -- Kubernetes kubectl label 命令详解
  5. 容器编排技术 -- Kubernetes kubectl annotate 命令详解
  6. 使用Docker制作zentao禅道镜像
  7. BGP——路由汇总造成次优选路问题
  8. 洛谷P5661 公交换乘(CSP-J 2019 T2)
  9. Windows/Linux服务器上Tomcat开启远程调试,使用IDEA本地调试
  10. ASCII编码,将英文存储到计算机