1、题目描述
2、问题分析
使用一个vector将所有节点的值以升序排列。然后比较,求和,加上。
3、代码
TreeNode* convertBST(TreeNode* root) {
if (root == NULL)
return NULL; vector<int> v;
inorder(root,v);
increaseVal(root, v); return root; } void increaseVal(TreeNode *root, vector<int> &v)
{
if(root == NULL)
return ;
int sum = ;
auto it = find(v.begin(), v.end(), root->val);
if (it != v.end() - ) {
sum = accumulate(it + , v.end(), );
root->val = root->val + sum;
} increaseVal(root->left, v);
increaseVal(root->right, v);
} void inorder(TreeNode *root, vector<int> &v)
{
if (root == NULL)
return ;
inorder(root->left, v);
v.push_back(root->val);
inorder(root->right,v);
}