538. 把二叉搜索树转换为累加树
知识点:二叉树
时间:2020年9月21日
题目链接: https://leetcode-cn.com/problems/convert-bst-to-greater-tree/
题目
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
示例1
输入:
原始二叉搜索树:
5
/ \
2 13
输出:
转换为累加树:
18
/ \
20 13
解法:
- 对于每一个节点,它右子树中的节点值都比他大,需要累加起来为sum
- 当前节点+=sum
- 递归处理左子树
- sum 保存了所有 比当前节点大的 节点值的和
- 反序中序遍历
代码
#include <stdio.h>
#include <iostream>
using namespace std;
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) {
retraversal(root);
return root;
}
void retraversal(TreeNode* root){
if(root == nullptr){return;}
retraversal(root->right);
sum += root->val;
root->val = sum;
retraversal(root->left);
}
};
void printTree(TreeNode* root){
if(root==nullptr){return;}
printTree(root->left);
cout<<root->val<<endl;
printTree(root->right);
}
int main()
{
TreeNode root(5);
TreeNode node1(2);TreeNode node2(13);
root.left = &node1;root.right=&node2;
printTree(&root);
Solution s;
TreeNode* ans = s.convertBST(&root);
printTree(ans);
}
今天也是爱zz的一天哦!