原题题目
代码实现(首刷自解)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* visit(struct TreeNode* root,int* tempnumber)
{
if(root)
{
root->right = visit(root->right,tempnumber);
*tempnumber += root->val;
root->val = *tempnumber;
root->left = visit(root->left,tempnumber);
return root;
}
else
return NULL;
}
struct TreeNode* convertBST(struct TreeNode* root){
int tempnumber = 0;
root = visit(root,&tempnumber);
return root;
}
代码实现(二刷自解)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
stack<TreeNode*> s;
void visit(TreeNode* root)
{
if(!root) return;
visit(root->left);
s.push(root);
visit(root->right);
}
TreeNode* convertBST(TreeNode* root) {
int temp = 0;
visit(root);
while(!s.empty())
{
auto pre = s.top()->val;
s.top()->val += temp;
temp += pre;
s.pop();
}
return root;
}
};