404左叶子之和
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
//决定采用递归的写法,注意递归写法的三要素
//1.确定递归函数参数及返回值
//参数一定要是root节点,返回值就是左叶子节点的和
//2.确定终止条件,当节点为空时返回
if(root == nullptr) return 0;
//3.确定单层回归逻辑
int left_sum = sumOfLeftLeaves(root->left);
int right_sum = sumOfLeftLeaves(root->right);
//注意这里,要判断一个节点是不是左叶子节点,只能从他的父节点判断
//如果从本身判断时无法判断的
int mid_sum = 0;
if(root->left!=nullptr && root->left->left == nullptr && root->left->right==nullptr){
mid_sum = root->left->val;
}
int sum = left_sum + right_sum + mid_sum;
return sum;
}
};
513. 找树左下角的值
class Solution {
public:
int findBottomLeftValue(TreeNode* root) {
//找左下角的,无非是二叉树的层序遍历,因为层序遍历最后一层的最左边肯定是整个数最左边的数
queue que;
//因为题目说过,树最少有一个节点,所以我们就先这样
que.push(root);
int ans = 0;
while(!que.empty()){
int size = que.size();
//不断更新result,因为二叉树层序遍历最后一行的最左边的第一个数就是我们要的数
//所以一旦接受到ans,返回即可
vector result;
for(int i = 0; i < size; i++){
TreeNode* tmp = que.front();
que.pop();
result.push_back(tmp->val);
if(tmp->left) que.push(tmp->left);
if(tmp->right) que.push(tmp->right);
}
ans = result[0];
}
return ans;
}
};