ningendo

带条件的递归2,二叉树求和

一.描述

  通过二叉树带条件的求和来更好的理解递归

    可以参考前两篇文章

   一个简单的二叉树的例子来理解递归

 

  二叉树和BST的递归,带条件

 

二.左叶子求和

  来源:https://leetcode-cn.com/problems/sum-of-left-leaves/

    题意为求左叶子节点的值的和

    之前文章提过,若是求全部节点之和代码如下:

         

int sum(TreeNode node){
    if(node==null) {
        retrun 0;  
    }
    return node.val + sum(node.left) + sum(node.right);
}

这题相当于带了条件的递归,条件为叶子节点,且是左节点

代码如下

class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        return Travelse(root,false);
    }

    private int Travelse(TreeNode root,boolean isLeft) {
//叶子节点 且 是左节点
        if(root != null && root.left == null && root.right == null && isLeft){
            return root.val + Travelse(root.left,true) + Travelse(root.right,false);
        }
        if(root == null) {
            return 0;
        }
//其他情况不加入本节点值
        return Travelse(root.left,true) + Travelse(root.right,false);
    }
}

三. 左叶子求和图解分析

 

 

 

 

四. 祖父节点值为偶数的节点和

      来源:https://leetcode-cn.com/problems/sum-of-nodes-with-even-valued-grandparent/

      同样是求和,条件是祖父节点的值为偶数,思路同上一题一模一样

        这里用两个参数来记录父节点与祖父节点

  代码如下:

 

class Solution {
    public int sumEvenGrandparent(TreeNode root) {
        return sum(root,null,null);
    }

    private int sum(TreeNode root,TreeNode parent,TreeNode grandpa){
        if(root==null){
            return 0;
        }
        if(grandpa==null){
            return sum(root.left,root,parent) + sum(root.right,root,parent);
        }else{
            if(grandpa.val%2!=0){ 
                return sum(root.left,root,parent) + sum(root.right,root,parent);
            }
        }//祖父节点为偶数 
return root.val + sum(root.left,root,parent) + sum(root.right,root,parent); } }

 

 

五.上题图解分析

 

 六.总结

可以归纳为以下模板

返回值  function (集合){

  if(剔除条件 1){

          return  function(下一个元素)  运算  function(下一个元素);

    }

 if(剔除条件 2){

          return  function(下一个元素)  运算  function(下一个元素);

 

    }

//......

return  当前元素  运算 function(下一个元素)  运算  function(下一个元素);

}

 

祖父节点值为偶数的节点和

posted on 2020-12-30 00:16  Lunamonna  阅读(130)  评论(0编辑  收藏  举报

导航