1. 程式人生 > >538. 把二叉搜尋樹轉換為累加樹

538. 把二叉搜尋樹轉換為累加樹

題目分析:
其實只要看到BST就應該立馬想到它的一個重要的性質:其中序遍歷序列是非遞減的。因此本題目的思路就是:先求樹中所有結點值的和sum,然後中序遍歷BST,用sum代替之前的結點值,然後更新sum。
請看下面的程式碼:

class Solution {
public:
    void inorder(TreeNode*root,int &sum){            //中序遍歷,將BST轉化為累加樹,因為sum的值需要不斷的變化,因此使用引用
        if(root==NULL){
            return;
        }
        inorder(root->
left,sum); //遞迴中序遍歷左子樹 int temp=root->val; //先保留該節點的值 root->val=sum; //更新該節點的值為sum sum-=temp; //更新sum的值,減去之前保留的結點的值 inorder(root->right,sum); //遞迴中序遍歷右子樹。 } void
inorderSum(TreeNode*root,int &sum){ //中序遍歷對BST求和,sum要使用引用的方式 if(root==NULL){ return; } inorderSum(root->left,sum); sum+=root->val; inorderSum(root->right,sum); } TreeNode* convertBST(TreeNode* root) { int sum
=0; inorderSum(root,sum); //呼叫函式 inorder(root,sum); return root; } };