美文网首页
LeetCode Convert BST to Greater

LeetCode Convert BST to Greater

作者: codingcyx | 来源:发表于2018-04-21 10:56 被阅读0次

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

Morris Traversal:

    TreeNode* convertBST(TreeNode* root) {
        int sum = 0;
        TreeNode* node = root;
        while(node){
            if(node->right == NULL){
                sum += node->val;
                node->val = sum;
                node = node->left;
            }
            else{
                //find the successor
                TreeNode* succ = node->right;
                while(succ->left && succ->left != node)
                    succ = succ->left;
                if(succ->left == NULL){
                    succ->left = node;
                    node = node->right;
                }
                else{
                    succ->left = NULL;
                    sum += node->val;
                    node->val = sum;
                    node = node->left;
                }
            }
        }
        return root;
    }

解析:
https://leetcode.com/problems/convert-bst-to-greater-tree/solution/

相关文章

网友评论

      本文标题:LeetCode Convert BST to Greater

      本文链接:https://www.haomeiwen.com/subject/yjztlftx.html