Java 求解左叶子之和
Posted 南淮北安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 求解左叶子之和相关的知识,希望对你有一定的参考价值。
一、题目
计算给定二叉树的所有左叶子之和。
二、题目分析
注意题目是求所有左叶子之和
左叶子:该节点在左子树位置,同时该节点的左右子树均为空
所以只能通过父节点判断该节点是否为左叶子
if (root.left != null && root.left.left == null && root.left.right == null) {
}
三、递归法
该题对于遍历顺序没有要求,只需要遍历节点时,判断该节点的左子树节点是否是左叶子节点即可
class Solution {
int sum = 0;
public int sumOfLeftLeaves(TreeNode root) {
//先序遍历求解左叶子之和
preOrder(root);
return sum;
}
public void preOrder(TreeNode root) {
//递归终止条件
if (root == null) {
return;
}
//根据父节点判断该节点是否是左叶子
if (root.left != null && root.left.left == null && root.left.right == null) {
sum += root.left.val;
}
//先序遍历左子树
preOrder(root.left);
//先序遍历右子树
preOrder(root.right);
}
}
四、迭代法
借助栈实现先序遍历:
class Solution {
int sum = 0;
public int sumOfLeftLeaves(TreeNode root) {
int sum = 0;
if (root == null) {
return sum;
}
Deque<TreeNode> deque = new LinkedList<>();
TreeNode node;
deque.push(root);
while (!deque.isEmpty()) {
node = deque.pop();
if (node.left != null && node.left.left == null && node.left.right == null) {
sum += node.left.val;
}
if (node.right != null) {
deque.push(node.right);
}
if (node.left != null) {
deque.push(node.left);
}
}
return sum;
}
}
五、总结
本题的关键就是对节点的判断
注意题目左叶子的要求:
if (root.left != null && root.left.left == null && root.left.right == null) {
}
以上是关于Java 求解左叶子之和的主要内容,如果未能解决你的问题,请参考以下文章