【js】Leetcode每日一题-二叉树的堂兄弟节点

【js】Leetcode每日一题-二叉树的堂兄弟节点

【题目描述】

在二叉树中,根节点位于深度 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

提示:

1.二叉树的节点数介于 2 到 100 之间。
2.每个节点的值都是唯一的、范围为 1 到 100 的整数。

【分析】

二叉树dfs | bfs遍历

代码:

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} x
 * @param {number} y
 * @return {boolean}
 */
var isCousins = function(root, x, y) {
    let dx = 0, px = null, fx = false;
    let dy = 0, py = null, fy = false;
    const dfs = function(root, depth, parent){
        if(!root) return;
        if(root.val == x){
            [dx, px, fx] = [depth, parent, true]
        }else if(root.val == y){
            [dy, py, fy] = [depth, parent, true]
        }
        if(fx && fy) return;
        dfs(root.left, depth+1, root);
        if(fx && fy) return;
        dfs(root.right, depth+1, root);
    }
    dfs(root, 0, null);
    return dx == dy && px != py;
};
posted @ 2021-05-17 19:59  kernel_developer  阅读(30)  评论(0编辑  收藏  举报