LeetCode---437.路徑總和III
阿新 • • 發佈:2018-11-10
題目來源: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); }