您的位置:首页 > 其它

538. Convert BST to Greater Tree

2017-07-13 23:36 549 查看
Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST.

Example:

Input: The root of a Binary Search Tree like this:
5
/   \
2     13

Output: The root of a Greater Tree like this:
18
/   \
20     13


思路:先找出二叉树的节点总和,然后按照中序遍历从最左子节点开始赋值并递减原来总和

void sum_Tree(TreeNode* root,int &sum){
if (root == NULL)return;
sum_Tree(root->left, sum);
sum += root->val;
sum_Tree(root->right, sum);
}

TreeNode* convertBST(TreeNode* root) {
if (root == NULL)return NULL;
int sum = 0;
sum_Tree(root, sum);
stack<TreeNode* > temp;
TreeNode *p = root;
while (!temp.empty() || p){
if (p){
temp.push(p);
p = p->left;
}
else{
p = temp.top();
temp.pop();
int tmp = p->val;
p->val = sum;
sum -= tmp;
p = p->right;
}
}
return root;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: