538. Convert BST to Greater Tree

来源:互联网 发布:凡科建站怎么监测数据 编辑:程序博客网 时间:2024/06/14 01:11

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     13Output: 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;}
原创粉丝点击