leetcode 22:sum-root-to-leaf-numbers
阿新 • • 發佈:2020-08-16
題目描述
給定一個僅包含數字0−9\ 0-90−9 的二叉樹,每一條從根節點到葉子節點的路徑都可以用一個數字表示。例如根節點到葉子節點的一條路徑是1→2→31\to 2\to 31→2→3,那麼這條路徑就用123\ 123123 來代替。
找出根節點到葉子節點的所有路徑表示的數字之和
例如:
這顆二叉樹一共有兩條路徑,
根節點到葉子節點的路徑 1→21\to 21→2 用數字12\ 1212 代替
根節點到葉子節點的路徑 1→31\to 31→3 用數字13\ 1313 代替
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 }