leetcode算法练习
404.左叶子之和
题目链接
本题中左叶子:首先要保证是叶子节点 其次是父节点的左孩子
思路:
按照以前的想法 遍历下来仅仅能判断出是不是叶子节点 无法判断出是否是父节点的左孩子 因此只能只能遍历到父节点 然后判断父节点的左孩子是否为空 父节点的左孩子的左右孩子是否为空
使用后序遍历——因为要一层一层向上返回 例如根节点 收集其左子树的左叶子之和 其右子树的左叶子之和 返回给上一层
9也是同理 他把看成一棵新的二叉树 计算其左右子树之和
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
// 遍历到空节点 左叶子节点之和一定为0
if (root == null) return 0;
// 后序
// 左
int leftValue = sumOfLeftLeaves(root.left);
// 右
int rightValue = sumOfLeftLeaves(root.right);
// 记录值
int midValue = 0;
// 左孩子不为空 做孩子的左右孩子为空 即左叶子
if (root.left != null && root.left.left == null && root.left.right == null) {
midValue = root.left.val;
}
// 根
int sum = midValue + leftValue + rightValue;
return sum;
}
}