LintCode-Convert BST to Greater Tree

来源:互联网 发布:plupload断点续传 php 编辑:程序博客网 时间:2024/06/01 12:41

题目描述:

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.

样例:

Given a binary search Tree `{5,2,3}`:

              5            /   \           2     13

Return the root of new tree

             18            /   \          20     13

做题思路:

利用自身函数的递归调用,从右子树开始,用遍历右根左的方法,赋值给sum加和,更新sum,再把sum赋值给根节点,更新根节点的值,根节点与左子树上的节点,根据遍历和递归,依次改变值,并返回该树的根节点。

关键代码:

class Solution {public:    /**     * @param root the root of binary tree     * @return the new root     */    int sum=0;    TreeNode* convertBST(TreeNode* root) {        // Write your code here    if(root==NULL) return NULL;    convertBST(root->right);    root->val+=sum;    sum=root->val;    convertBST(root->left);    return root;    }};

做题感想:这题想了好久,想出了好几种思路,但是会想不会写代码,所以上网搜了搜,这种算法便于看懂,更简洁。利用自身函数递归调用,来完成算法实现。