1. 程式人生 > 實用技巧 >leetcode 22:sum-root-to-leaf-numbers

leetcode 22:sum-root-to-leaf-numbers

題目描述

給定一個僅包含數字0−9\ 0-909 的二叉樹,每一條從根節點到葉子節點的路徑都可以用一個數字表示。
例如根節點到葉子節點的一條路徑是1→2→31\to 2\to 3123,那麼這條路徑就用123\ 123123 來代替。
找出根節點到葉子節點的所有路徑表示的數字之和
例如:

這顆二叉樹一共有兩條路徑,
根節點到葉子節點的路徑 1→21\to 212 用數字12\ 1212 代替
根節點到葉子節點的路徑 1→31\to 313 用數字13\ 1313 代替
所以答案為12+13=25\ 12+13=2512+13=25
題目分析: 這個題和劍指offer中和為某一值的路徑基本一致。程式碼如下:
 1 void sumNumbersCore(TreeNode* root,int &pathNum,int &sum)
 2     {
 3         if(root)
 4         {
 5             pathNum = pathNum * 10 + root->val;
 6             //如果是葉子節點,一條搜尋路徑完成,累加到sum
 7             if(!root->left && !root->right)
8 { 9 sum += pathNum; 10 } 11 else 12 { 13 if(root->left) 14 sumNumbersCore(root->left,pathNum, sum); 15 if(root->right) 16 sumNumbersCore(root->right,pathNum, sum);
17 } 18 //返回父節點之前,路徑上刪除當前節點 19 pathNum /= 10; 20 } 21 } 22 int sumNumbers(TreeNode* root) { 23 // write code here 24 int pathNum = 0; 25 int sum = 0; 26 sumNumbersCore(root,pathNum,sum); 27 return sum; 28 }