大家好,继续刷题,今天刷到一道很巧妙的题,来看题目要求:
思路:因为是二叉搜索树,所以先递归右子树,然后把中间节点累加起来,然后递归左子树就可以了。其实想明白这个就很简单了,主要还是要利用搜索树的特性。
/**
* 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:
int sum = 0;
TreeNode* convertBST(TreeNode* root) {
Sumnum(root);
return root;
}
void Sumnum(TreeNode * root){
if(!root)
return;
Sumnum(root -> right);
root -> val += sum;
sum = root -> val;
Sumnum(root -> left);
}
};
我们下期见!