C語言遞歸之求根到葉節點數字之和

題目描述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著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。

相關文章
相關標籤/搜索