leetcode题目:1315. 祖父节点值为偶数的节点和(中等)

给你一棵二叉树,请你返回满足以下条件的所有节点的值之和:

  • 该节点的祖父节点的值为偶数。(一个节点的祖父节点是指该节点的父节点的父节点。)
    如果不存在祖父节点值为偶数的节点,那么返回 0 。
    leetcode题目:1315. 祖父节点值为偶数的节点和(中等)_第1张图片
    示例:
    输入:root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5]
    输出:18
    解释:图中红色节点的祖父节点的值为偶数,蓝色节点为这些红色节点的祖父节点。

方法一:深度优先遍历

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    private int count;
    public int sumEvenGrandparent(TreeNode root) {
        dfs(null,null,root);
        return count;
    }
    //采用深度优先搜索
    public void dfs(TreeNode gra,TreeNode par,TreeNode node){
        if(node==null){
            return;
        }
        if((gra!=null)&&(gra.val%2==0)){
            count += node.val;
        }
        dfs(par,node,node.left);
        dfs(par,node,node.right);
    }
}

方法二:广度优先遍历。
在此方法下,时间复杂度有点高。。超出了运算时间

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    private int count;
    public int sumEvenGrandparent(TreeNode root) {
        //创建一个队列
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(root);
        while(queue!=null){
            TreeNode node = queue.poll();
            if(node!=null){
                if(node.left!=null){
                    if(node.left.left!=null){
                        count += node.left.left.val;
                    }
                    if(node.left.right!=null){
                        count += node.left.right.val;
                    }
                }
                if(node.right!=null){
                    if(node.right.left!=null){
                        count += node.right.left.val;
                    }
                    if(node.right.right!=null){
                        count += node.right.right.val;
                    }
                }
                if(node.left!=null){
                    queue.offer(node.left);
                }
                if(node.right!=null){
                    queue.offer(node.right);
                }
            }
        }
        return count;
    }
}

你可能感兴趣的:(leetcode,算法,leetcode)