538 Convert BST to Greater Tree 把二叉搜索树转换为累加树
2024-09-27 14:51:18
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
例如:
输入: 二叉搜索树:
5
/ \
2 13
输出: 转换为累加树:
18
/ \
20 13
详见:https://leetcode.com/problems/convert-bst-to-greater-tree/description/
C++:
方法一:
/**
* 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;
helper(root, sum);
return root;
}
void helper(TreeNode*& node, int& sum)
{
if (!node)
{
return;
}
helper(node->right, sum);
node->val += sum;
sum = node->val;
helper(node->left, sum);
}
};
方法二:
/**
* 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) {
if (!root)
{
return nullptr;
}
int sum = 0;
stack<TreeNode*> stk;
TreeNode *p = root;
while (p || !stk.empty())
{
while (p)
{
stk.push(p);
p = p->right;
}
p = stk.top();
stk.pop();
p->val += sum;
sum = p->val;
p = p->left;
}
return root;
}
};
参考:http://www.cnblogs.com/grandyang/p/6591526.html
最新文章
- ArcGIS Engine开发前基础知识(2)
- Arduino 极速入门系列 - 光控灯(2) - 关于开关,上拉、下拉电阻那些事
- linux程序调试命令strace
- DAX 2009 for Retail&#39;s P job does not work after restoring AX database from another environment.
- Shuffle相关分析
- ubuntu第一次设置root密码
- C# 编写Window服务基础(一)
- C#读取Excel五种方式的体会
- G++ 教程(转)
- Flightgear 编译
- 【iOS知识学习】_iOS沙盒机制
- C/C++程序员面试大纲
- Building Particle Filters and Particle MCMC in NIMBLE
- Log4net快速配置使用指南。(快速搭建log4net日志平台手册)
- LVS负载均衡群集
- ☆ [NOIp2016] 天天爱跑步 「树上差分」
- MultipartFile(文件的上传)
- JAVA框架 Spring JDBC模板
- C#与Java 的区别
- HTTP协议中TCP的三次握手 and HTTPS