1 题目
https://leetcode-cn.com/problems/sum-of-left-leaves/
2 题意
计算给定二叉树的所有左叶子之和。
示例:
3
/
9 20
/
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
3 解题思路
author's blog == http://www.cnblogs.com/toulanboy/
该题比较简单,考核的是二叉树的遍历。
(1)使用先、中、后,任意一种去遍历所有节点,然后逐一判断是否是左叶子。
(2)左叶子判断逻辑为:当前节点是叶子,再判断是否是其父亲的左孩子
**如何知道其是否是其父亲的左孩子? **
答:函数参数考虑多一个父亲指针,这样就可以时刻知道该节点的父亲。
4 代码实现
//author's blog == http://www.cnblogs.com/toulanboy/
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int ans = 0;
//函数逻辑:使用先序遍历,遍历所有节点。然后逐一判断节点是否是左叶子
//参数:root当前树的根, father是root的父亲(用来判断是否是其左孩子)
void get_ans(TreeNode * root, TreeNode * father){
if(root == NULL)//空树返回
return;
//左叶子判断:当前节点是叶子,再判断是否是其父亲的左孩子
if(root->left == NULL && root->right == NULL && father && root == father->left){
ans += root->val;
}
get_ans(root->left, root);// 遍历左子树
get_ans(root->right, root);// 遍历右子树
}
int sumOfLeftLeaves(TreeNode* root) {
get_ans(root, NULL);
return ans;
}
};