標籤:leetcode 演算法 面試
【題目】
Given a binary tree containing digits from 0-9
only, each root-to-leaf path could represent a number.
An example is the root-to-leaf path 1->2->3
which represents the number 123
.
Find the total sum of all root-to-leaf numbers.
For example,
1 / 2 3
The root-to-leaf path 1->2
represents the number 12
.
The root-to-leaf path 1->3
represents the number 13
.
Return the sum = 12 + 13 = 25
.
【題意】
給定一棵二叉樹,節點值只可能是[0-9]區間上的值,每一條從根到葉子的節點都可以看成一個整數,現要求把所有路徑表示的整數相加,返回和
【思路】
DFS,找到左右的路徑,實數化每條路徑上組合數。將所有的路徑上得到的整數求和。
這裡2有個問題:
1. 如果某條路徑太長,組合數已經超出了int的上界怎麼辦
2. 如果最終的和超出了int的上界怎麼辦
題目沒有進一步的說明,我們預設所給的測試案例都保證不會越界。
【代碼】
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: void dfs(int&result, int num, TreeNode*node){ //result表示所有路徑的組合 //num表示根到node的父節點的組合數 if(node){ num=10*num+node->val; //計算從根到當前節點的組合數 if(node->left==NULL && node->right==NULL){ result+=num; //已經找到一個條路徑的組合數,累加到result上 return; } if(node->left) dfs(result, num, node->left); if(node->right) dfs(result, num, node->right); } } int sumNumbers(TreeNode *root){ if(root==NULL)return NULL; int result=0; int num=0; dfs(result, num, root); return result; }};