zoukankan      html  css  js  c++  java
  • #leetcode404.所有左叶子节点之和

     这道题的要求是所有左叶子节点之和,即只要是左节点就应该被算在内,题解的答案真的是非常的简单粗暴,看一下:

    public int sumOfLeftLeaves(TreeNode root) {
    
            if(root == null)
                return 0;
            if(isLeaf(root.left))
                return root.left.val + sumOfLeftLeaves(root.right);
    
            return sumOfLeftLeaves(root.left) + sumOfLeftLeaves( root.right);
        }
    
        public boolean isLeaf(TreeNode head) {
            if ( head == null)
                return false;
    
            return head.left==null && head.right ==null;
        }

    不得不说,这道题的题解真的是太简单粗暴了,我什么时候能把递归用成这样就好了!

    如果root是null的话 没有左子节点,所以直接返回0;

    同样也是递归的出口,就是如果这个节点的左节点/右节点为null了,返回0就可以了,不用继续递归了。

    而下面这句 if(isLeaf(root.left)) 就是在往下递归的过程中,碰到了左子节点就加起来,然后这时候只需要递归右边的节点就ok了,

    如果不是左子节点的话,那么需要将左右都看成是本函数空间的根节点递归的进行计算。太妙了!

    这段代码其实是从上往下递归计算的,和之前最大最小路径的从下往上递归计算思路上有所区别;

  • 相关阅读:
    使用c#读取/解析二维码
    MVVM中的RelayCommand与AsyncCommand
    MVVM模式下的OpenFileDialog
    集成Source Monitor至VS中
    [转]异步command的实现
    使用Messenger实现MVVM的对话框弹出
    使用NPOI访问、控制Excel
    win11更新
    Codeforces Round #749 总结
    Codeforces Round #697 (Div. 3)
  • 原文地址:https://www.cnblogs.com/kerwins-AC/p/14458668.html
Copyright © 2011-2022 走看看