解法一:广度优先遍历
广度优先遍历,对于值为偶数的结点,对其孙子结点求和。
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/class Solution {public int sumEvenGrandparent(TreeNode root) {Queue<TreeNode> queue = new LinkedList<>();if (root != null) {queue.offer(root);}int sum = 0;while (!queue.isEmpty()) {TreeNode tmp = queue.poll();// 对四个可能的孙子结点求和if (tmp.val % 2 == 0) {if (tmp.left != null) {if (tmp.left.left != null) {sum += tmp.left.left.val;}if (tmp.left.right != null) {sum += tmp.left.right.val;}}if (tmp.right != null) {if (tmp.right.left != null) {sum += tmp.right.left.val;}if (tmp.right.right != null) {sum += tmp.right.right.val;}}}if (tmp.left != null) {queue.offer(tmp.left);}if (tmp.right != null) {queue.offer(tmp.right);}}return sum;}}
解法二:深度优先遍历
基本同上,但采用深度优先遍历。
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/class Solution {public int sumEvenGrandparent(TreeNode root) {return dfs(root);}private int dfs(TreeNode root) {if (root == null) {return 0;}int sum = 0;// 对四个可能的孙子结点求和if (root.val % 2 == 0) {if (root.left != null) {if (root.left.left != null) {sum += root.left.left.val;}if (root.left.right != null) {sum += root.left.right.val;}}if (root.right != null) {if (root.right.left != null) {sum += root.right.left.val;}if (root.right.right != null) {sum += root.right.right.val;}}}if (root.left != null) {sum += dfs(root.left);}if (root.right != null) {sum += dfs(root.right);}return sum;}}
