leetcode 993. 二叉树的堂兄弟节点
在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。
如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。
我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。
只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。
示例 1:
输入:root = [1,2,3,4], x = 4, y = 3
输出:false
示例 2:
输入:root = [1,2,3,null,4,null,5], x = 5, y = 4
输出:true
示例 3:
输入:root = [1,2,3,null,4], x = 2, y = 3
输出:false
提示:
二叉树的节点数介于 2 到 100 之间。
每个节点的值都是唯一的、范围为 1 到 100 的整数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cousins-in-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/** * Definition for a binary tree node. * public 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; * } * } */ class Solution { int d1 = 0; int d2 = 0; int f1; int f2; public boolean isCousins(TreeNode root, int x, int y) { if (root.val == x || root.val == y) { return false; } find(root, root.left, x, y, 1); find(root, root.right, x, y, 1); return d1 == d2 && f1 != f2; } private void find(TreeNode last, TreeNode root, int x, int y, int d) { if (root == null) { return; } if (root.val == x) { d1 = d; f1 = last.val; } if (root.val == y) { d2 = d; f2 = last.val; } if (d1 != 0 && d2 != 0) { return; } find(root, root.left, x, y, d + 1); find(root, root.right, x, y, d + 1); } }