代码随想录刷题day44|(二叉树篇)404.左叶子之和
目录
一、二叉树理论知识
二、题目思路
三、相关算法题目
四、总结
一、二叉树理论知识
详见:代码随想录刷题day34|(二叉树篇)二叉树的递归遍历-CSDN博客
二、题目思路
迭代法:层序遍历
层序遍历每一层节点,队列存储待处理节点,单独处理左叶子节点,如果是左叶子节点,就将节点值加和,否则只入队,不加和;
易错点:注意求的是左叶子节点,两个条件:左节点+叶子节点,首先判断是否为左节点,接着还要保证是叶子节点(左右子树均为空)
递归法:
单层递归逻辑核心:判断当前节点的左子节点是否为叶子节点,如果是,则累加其值,否则,继续递归遍历左子树和右子树;递归的终止条件是当前节点为空;
可以前序遍历、后序遍历、中序遍历;
三、相关算法题目
404.左叶子节点
迭代法:
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
//迭代法:层序遍历
Deque<TreeNode> deque = new ArrayDeque<>();
if(root == null) return 0;
deque.offer(root);
int sum = 0;
while(!deque.isEmpty()){
TreeNode node = deque.poll();
if(node.left != null){
//保证是左节点
deque.offer(node.left);
if(node.left.left == null && node.left.right == null){
//保证是左叶子节点
sum = sum + node.left.val;
}
}
if(node.right != null){
deque.offer(node.right);
}
}
return sum;
}
}
递归法:
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
//递归法
return getSum(root);
}
public int getSum(TreeNode node){
int sum = 0;
if(node == null) return 0;
//单层递归逻辑
if(node.left != null && node.left.left == null && node.left.right == null){
sum = sum + node.left.val;
}
sum += getSum(node.left);
sum += getSum(node.right);
return sum;
}
}
四、总结
1.迭代法注意判断是否为叶子节点;
2.递归法的单层逻辑;