把二叉搜索树转换为累加树
二叉搜索树
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
示例
输入: 二叉搜索树:
5
/ \
2 13
输出: 转换为累加树:
18
/ \
20 13
代码
反序中序遍历(递归)
TreeNode* convertBST(TreeNode* root) {
int sum = 0;
if(!root) return nullptr;
inorder(root,sum);
return root;
}
void inorder(TreeNode* &root,int &sum)
{
if(root->right) inorder(root->right,sum);
sum += root->val;
root->val = sum;
if(root->left) inorder(root->left,sum);
}
采用栈迭代
TreeNode* convertBST(TreeNode* root) {
int sum = 0;
stack<TreeNode*> stk;
TreeNode* node = root;
while(!stk.empty()||node != nullptr)
{
while(node!=nullptr)
{
stk.push(node);
node = node->right;
}
node = stk.top();
stk.pop();
sum += node->val;
node->val = sum;
node = node->left;
}
return root;
}