leetcode - 538. 把二叉搜索树转换为累加树
给定一个二叉搜索树(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. 把二叉搜索树转换为累加树相关推荐
- [二叉树遍历|BST]leetcode 538 把二叉搜索树转换为累加树
[二叉树遍历|BST]leetcode 538 把二叉搜索树转换为累加树 1.题目 题目链接 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree) ...
- Leetcode 538. 把二叉搜索树转换为累加树 C++
Leetcode 538. 把二叉搜索树转换为累加树 题目 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加 ...
- LeetCode 538. 把二叉搜索树转换为累加树 | Python
538. 把二叉搜索树转换为累加树 题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/convert-bst-to-greater-tree 题目 给 ...
- LeetCode 538. 把二叉搜索树转换为累加树(逆中序 根右左)
文章目录 1. 题目 2. 逆中序(根右左,降序循环遍历) 1. 题目 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原 ...
- leetcode 538. 把二叉搜索树转换为累加树 思考分析
题目 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和. 提醒一 ...
- LeetCode 538. 把二叉搜索树转换为累加树
思路:ST的中序遍历就是从小到大,那么反过来就是从大到小,然后通过num累加 int num =0;public TreeNode convertBST(TreeNode root) {if(roo ...
- LeetCode系列538—把二叉搜索树转换为累加树
题意 538. 把二叉搜索树转换为累加树 题解 方法一:反序中序遍历 class Solution {private:int sum = 0; public:TreeNode* convertBST( ...
- leetcode c++未初始化_LeetCode 力扣官方题解 | 538. 把二叉搜索树转换为累加树
力扣 538. 把二叉搜索树转换为累加树(点击查看题目) 力扣leetcode-cn.com 题目描述 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater ...
- LeetCode 力扣 538. 把二叉搜索树转换为累加树 convertBstToGreaterTree538树
大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 538. 把二叉搜索树转换为累 ...
最新文章
- 微信小程序模板template
- 实例讲解UML建模分析与设计
- html5 input required oninvalid,为什么我的“ oninvalid”属性会让模式失败?
- 14工厂方法模式(Factory Method)
- python ascii转字符串_Python将混合ASCII代码转换为字符串
- 人力资源学python有意义吗-给还准备继续做HR的人提个醒!
- 官方AI语音系统电销机器人系统搭建|AI智能|电话机器人源码|2022最新电销外呼系统《各版本机器人部署》
- 马尔科夫模型 Markov Model
- Chrome源码chromium下载编译详细步骤
- JavaScript系列-闭包
- MySql 报错1548
- 中国大学MOOC|C语言程序设计(浙江大学翁恺)|习题与解答
- 酒友app软件开源平台
- 科技云报道:安全脱管不如托管
- 数据结构习题集之魔王语言解释
- SOUI中屏蔽右键菜单
- Linux上的音频驱动及wineASIO与foobar2000
- colt python 357magnum_357磁(357 Magnum)——欧美十佳手枪
- JAVA异常实验:车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品
- 原创 | 新基建浪潮下,看科技巨头如何抢占先机
热门文章
- 前端面试:你应该了解的JS算法相关的知识
- Serverless实战 —— 函数计算如何访问 MySQL 数据库
- 面试官系统精讲Java源码及大厂真题 - 44 场景实战:ThreadLocal 在上下文传值场景下的实践
- 容器编排技术 -- Kubernetes kubectl label 命令详解
- 容器编排技术 -- Kubernetes kubectl annotate 命令详解
- 使用Docker制作zentao禅道镜像
- BGP——路由汇总造成次优选路问题
- 洛谷P5661 公交换乘(CSP-J 2019 T2)
- Windows/Linux服务器上Tomcat开启远程调试,使用IDEA本地调试
- ASCII编码,将英文存储到计算机