538.把二叉搜索樹轉換爲累加樹

給定一個二叉搜索樹(Binary Search Tree),把它轉換成爲累加樹(Greater Tree),使得每個節點的值是原來的節點值加上所有大於它的節點值之和。

例如:

輸入: 二叉搜索樹:
              5
            /   \
           2     13

輸出: 轉換爲累加樹:
             18
            /   \
          20     13

使用遞歸:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */


int sum=0;
struct TreeNode* convertBST(struct TreeNode* root){
    if(root==NULL)  return root;
    convertBST(root->right);
    root->val+=sum;
    sum=root->val;
    convertBST(root->left);
    return root;
}

可是在上述代碼進行提交驗證時,出現了一個小問題:

而第一個用例爲:[5,2,13]  在運行完第一個用例後sum==20,所以進行第二個用例計算時,sum的初值爲20。原因我猜測是:測試用例的程序在第一次測試時進行了函數外 int sum=0;的語句執行,但在後續函數測試時,直接進行了convertBST()的重複調用,沒有執行函數外 int sum=0;的語句,導致sum初值發生錯誤;

所以,我將代碼改爲:

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

在函數中調用函數,並在每次調用前對sum值賦值爲0;這樣在系統跑測試用例時就會每次都對sum進行初始化爲0的操作。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章