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 的整数。
代码演示
Java DFS
public class OneQuestionPerDay993 {
public static void main(String[] args) {
Solution s = new Solution();
TreeNode head01 = new TreeNode(1,new TreeNode(2,new TreeNode(4,new TreeNode(),new TreeNode()),new TreeNode()),new TreeNode(3,new TreeNode(),new TreeNode()));
System.out.println(s.isCousins(head01,4,3));
TreeNode head02 = new TreeNode(1,new TreeNode(2,new TreeNode(),new TreeNode(4,new TreeNode(),new TreeNode())),new TreeNode(3,new TreeNode(),new TreeNode(5,new TreeNode(),new TreeNode())));
System.out.println(s.isCousins(head02,4,5));
TreeNode head03 = new TreeNode(1,new TreeNode(2,new TreeNode(),new TreeNode(4,new TreeNode(),new TreeNode())),new TreeNode(3,new TreeNode(),new TreeNode()));
System.out.println(s.isCousins(head03,2,3));
}
}
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 {
public int deepSearch(TreeNode head, int n, int deep) {
if(head != null){
if(head.val == n){
return deep;
}
int left = deepSearch(head.left, n , deep + 1);
int right = deepSearch(head.right, n , deep + 1);
return left == -1 ? right : left;
/*if(left == -1)
return right;
else
return left;*/
}
return -1;
}
public boolean FaNode(TreeNode head, int x, int y){
if(head != null){
if(head.left != null && head.right != null){
if((head.left.val == x && head.right.val == y) || (head.left.val == y && head.right.val == x)){
return false;
}
}
return FaNode(head.left, x, y) && FaNode(head.right, x, y);
}
return true;
}
public boolean isCousins(TreeNode head, int x, int y) {
return deepSearch(head, x, 0) == deepSearch(head, y, 0) && FaNode(head, x, y);
}
}
Java 提交结果
执行用时:0 ms, 在所有 Java 提交中击败了100.00% 的用户
内存消耗:36 MB, 在所有 Java 提交中击败了87.10% 的用户