題目描述
給定一個二叉樹,它的每個結點都存放一個 0-9 的數字,每條從根到葉子節點的路徑都代表一個數字,
例如,從根到葉子節點路徑 1->2->3 代表數字 123,
計算從根到葉子節點生成的所有數字之和,
說明: 葉子節點是指沒有子節點的節點,
示例
輸入: [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 }
題解
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 }
遞回傳輸的資料包括二叉樹和數字和,因此定義一遞回函式,
當前節點累積數字等于左子節點和右子節點累計數字的和,
回傳條件是左子節點和右子節點都為空時,
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/sum-root-to-leaf-numbers
著作權歸領扣網路所有,商業轉載請聯系官方授權,非商業轉載請注明出處,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/139978.html
標籤:其他
上一篇:演算法題--Z字形變換
下一篇:IP資料報中是否開啟校驗和問題
