-
題目:
計算給定二叉樹的所有左葉子之和。
示例:
3
/
9 20
/
15 7
在這個二叉樹中,有兩個左葉子,分别是 9 和 15,是以傳回 24
-
解題思路
遞歸法:
遞歸出口:節點為空,傳回;左孩子,将其值壓入結果向量
一般:将根的左子樹中的所有左孩子壓入結果向量,将根的右子樹中的所有左孩子壓入結果向量
代碼實作
vector<int> sum(TreeNode* root)
{
vector<int> res;
if(!root)
return res;
if(root->left && !root->left->left && !root->left->right)
res.push_back(root->left->val);
vector<int>res1 = sum(root->left);
for(int i = 0; i < res1.size(); i++)
res.push_back(res1[i]);
vector<int>res2 = sum(root->right);
for(int i = 0; i < res2.size(); i++)
res.push_back(res2[i]);
return res;
}
int sumOfLeftLeaves(TreeNode* root) {
vector<int> res= sum(root);
int sum = 0;
for(int i = 0; i < res.size(); i++)
sum += res[i];
return sum;
}
實作二
int sum = 0;
int sumOfLeftLeaves(TreeNode* root) {
if(!root)
return sum;
if(root->left && !root->left->left && !root->left->right)
sum += root->left->val;
sumOfLeftLeaves(root->left);
sumOfLeftLeaves(root->right);
return sum;
}