classSolution{public:int sum =0;voiddfs(TreeNode* root){if(root ==nullptr)return;//右-中-左dfs(root->right);
root->val += sum;
sum = root->val;dfs(root->left);}
TreeNode*convertBST(TreeNode* root){dfs(root);return root;}};
迭代法
时间复杂度:O(N),空间复杂度:O(1)
classSolution{public:
TreeNode*convertBST(TreeNode* root){
stack<TreeNode*> st;int sum =0;
TreeNode* cur = root;while(!st.empty()|| cur !=nullptr){if(cur !=nullptr){
st.push(cur);
cur = cur->right;}else{
cur = st.top();
st.pop();
cur->val += sum;
sum = cur->val;
cur = cur->left;}}return root;}};