文章目录
- 1.题目
- 2.代码
1.题目
- 题目要求:538. 把二叉搜索树转换为累加树,把二叉搜索树转换为累加树
- 思路:中序遍历的变种
二叉搜索树是一棵空树,或者是具有下列性质的二叉树:
若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
它的左、右子树也分别为二叉搜索树。
由这样的性质我们可以发现,二叉搜索树的中序遍历是一个单调递增的有序序列。如果我们反序地中序遍历该二叉搜索树,即可得到一个单调递减的有序序列。
2.代码
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode():val(0),left(NULL),right(NULL) {}
TreeNode(int val):val(val),left(NULL),right(NULL) {}
TreeNode(int val,TreeNode* left,TreeNode* right) val(val),left(left),right(val) {}
};
class Solution {
public:
int sum=0;
TreeNode* convertBST(TreeNode* root) {
if (!root) return;
convertBST(root->right);
sum+=root->val;
root->val=sum;
convertBST(root->left);
return root;
}