1. 程式人生 > >LeetCode---437.路徑總和III

LeetCode---437.路徑總和III

題目來源:https://leetcode-cn.com/problems/path-sum-iii/description/

題目描述:

演算法描述:該題的難度在上篇部落格題目的基礎上加大了一些難度。

詳情請見: https://blog.csdn.net/qq_39241239/article/details/82777537

相信你已經看了之前的部落格了,那麼這題就變得比較簡單了。首先從根節點開始遍歷二叉樹,找出從根節點開始的符合題目條件的路徑之後,把路徑之和加1。當你遍歷完以根節點為起點的二叉樹之後。那麼你就該遍歷以根節點的左孩子為起點的二叉樹。如此遞迴就能得到結果。

程式碼如下:

int depth(struct TreeNode* root, int sum,int *count){
    if(root==NULL){
        return 0;
    }
    //當遍歷到一個節點時,發下從起點到該結點的路徑符合要求,那麼個數加1.
    if(sum==root->val){
        *count+=1;
    }
    //開始遞迴遍歷左子樹
    depth(root->left,sum-root->val,count);
    //開始遞迴遍歷右子樹
    depth(root->right,sum-root->val,count);
    return 0;
}


int pathSum(struct TreeNode* root, int sum) {
    if(root==NULL){
        return 0;
    }
    //因為要改變count的陣列,所以傳的引數為一個指標
    int *count =(int*)malloc(sizeof(int));
    *count=0;
    //該函式執行完之後,*count的數值就是以根節點為起點的二叉樹中符合條件的路徑數之和。
    depth(root,sum,count);
    
    //然後再遞迴遍歷左子樹,右子樹等等。
    return *count+=pathSum(root->left,sum)+pathSum(root->right,sum);
    
}