0
点赞
收藏
分享

微信扫一扫

6.13 左叶子之和——【LeetCode】

_铁马冰河_ 2022-03-11 阅读 53

在这里插入图片描述





import java.util.Stack;

/**
 * @auther DNY
 * @create 2022-02-17 19:31
 */
public class test {

    public int sumOfLeftLeaves(TreeNode root) {
        if(root == null){
            return 0;
        }

        int leftValue = sumOfLeftLeaves(root.left);
        int rightValue = sumOfLeftLeaves(root.right);

        int midValue = 0;
        //通过父结点判断孩子结点是否是叶子结点
        //下面的判断条件即可判断出左叶子结点
        //以图为例,即再3和20处分别计算了一次下面的sum
        if(root.left != null && root.left.left == null && root.left.right == null){
            midValue = root.left.val;
        }
        int sum = midValue + leftValue + rightValue;
        return sum;
    }


    public int sumOfLeftLeaves1(TreeNode root) {
        if(root == null){
            return 0;
        }
        Stack<TreeNode> stack = new Stack<>();//临时存储每一行的结点
        stack.add(root);
        int result = 0;
        while(!stack.isEmpty()){
            TreeNode node = stack.pop();
            if (node.left != null && node.left.left == null && node.left.right == null) {
                result += node.left.val;
            }
            //提前加入结点到stack中 为下次while循环做准备
            if(node.right != null){
                stack.add(node.right);
            }
            if(node.left != null){
                stack.add(node.left);
            }
        }
        return result;
    }


}

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;
    }
}
举报

相关推荐

0 条评论