给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
例如:
输入: 二叉搜索树: 5 / \ 2 13 输出: 转换为累加树: 18 / \ 20 13
思路:
题目给的是二叉搜索树,所以只需要把该节点的值加上他本身及父节点和父右节点的值即可。
按照中序遍历把节点放入stack中,这时stack自栈顶向下元素由大到小排列,我们每次把栈顶元素值赋给下一个元素即可。
代码:
void convertBSTCore(TreeNode* root, stack<TreeNode*> &helper) {
if (!root) {
return;
}
convertBSTCore(root->left, helper);
helper.push(root);
convertBSTCore(root->right, helper);
}
TreeNode* convertBST(TreeNode* root) {
if (!root) {
return root;
}
stack<TreeNode*> helper;
convertBSTCore(root, helper);
int tmp = helper.top()->val;
helper.pop();
while (!helper.empty()) {
helper.top()->val += tmp;
tmp = helper.top()->val;
helper.pop();
}
return root;
}