二叉树左叶子之和(后序遍历,递归求和)
404. 左叶子之和 - 力扣(LeetCode)
class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {if(root==NULL){return 0;}if(root->right==NULL&&root->left==NULL){return 0;}int leftnum=sumOfLeftLeaves(root->left);if(root->left!=NULL&&root->left->left==NULL&&root->left->right==NULL){leftnum=root->left->val;}int rightnum=sumOfLeftLeaves(root->right);int sum=leftnum+rightnum;return sum;}
};
要想找到左叶子的的所有值,显然采用后序遍历的方法,从根节点开始向下遍历,如果根节点的左子树不为空,则一直递归向下循环,直到到达叶子节点,将叶子节点的值赋给leftnum。在递归之中如果某一个节点存在右子树,则会递归此时根节点,寻找这个节点的左叶子节点。右子树的左叶子节点和会被rightnum捕获。最后输出的就是头节点的左右节点返回的值之和。
注意:这个代码始终是对二叉树中的每一个小二叉树的根节点进行判断,始终将值返回给小二叉树的头节点。在往后遍历的时候,leftnum和rightnum是此时节点左右子树中叶子节点的值的和。