題目描述node
給定一個二叉樹,它的每一個結點都存放一個 0-9 的數字,每條從根到葉子節點的路徑都表明一個數字。網絡
例如,從根到葉子節點路徑 1->2->3 表明數字 123。函數
計算從根到葉子節點生成的全部數字之和。spa
說明: 葉子節點是指沒有子節點的節點。code
示例blog
輸入: [1,2,3] 1 / \ 2 3 輸出: 25 解釋: 從根到葉子節點路徑 1->2 表明數字 12. 從根到葉子節點路徑 1->3 表明數字 13. 所以,數字總和 = 12 + 13 = 25.
輸入: [4,9,0,5,1] 4 / \ 9 0 / \ 5 1 輸出: 1026 解釋: 從根到葉子節點路徑 4->9->5 表明數字 495. 從根到葉子節點路徑 4->9->1 表明數字 491. 從根到葉子節點路徑 4->0 表明數字 40. 所以,數字總和 = 495 + 491 + 40 = 1026.
題目要求遞歸
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * struct TreeNode *left; 6 * struct TreeNode *right; 7 * }; 8 */ 9 10 int sumNumbers(struct TreeNode* root){ 11 12 }
題解leetcode
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * struct TreeNode *left; 6 * struct TreeNode *right; 7 * }; 8 */ 9 10 int work(struct TreeNode* r,int count){ 11 count=count*10+r->val; 12 if(r->left==NULL&&r->right==NULL)return count; 13 if(r->left==NULL)return work(r->right,count); 14 if(r->right==NULL)return work(r->left,count); 15 return work(r->left,count)+work(r->right,count); 16 } 17 18 int sumNumbers(struct TreeNode* root){ 19 if(root==NULL)return 0; 20 return work(root,0); 21 }
遞歸傳輸的數據包括二叉樹和數字和,所以定義一遞歸函數。it
當前節點累積數字等於左子節點和右子節點累計數字的和。io
返回條件是左子節點和右子節點都爲空時。
來源:力扣(LeetCode)連接:https://leetcode-cn.com/problems/sum-root-to-leaf-numbers著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。