(leetcode)993. 二叉树的堂兄弟节点 -2021/5/17

993. 二叉树的堂兄弟节点 python

题目
在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。

如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。

我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。

只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。

example:
在这里插入图片描述
在这里插入图片描述

思路 python 【递归】

只有当深度相同,但父节点不同才为堂兄弟节点

  • 可以创建parent、depth,并且获取到深度和父节点,然后最后再进行判断

代码

class Solution:
    def isCousins(self, root: TreeNode, x: int, y: int) -> bool:
        # 如果根节点为空,或者x值为根节点,或者y值为根节点,这些都为false
        if (root is None or x == root.val or y == root.val): return False
        
        parent = {}
        depth = {}

        # 获取到深度和父节点 字典
        def dfs(node, par=None):
            if node:
                depth[node.val] = 1 + depth[par.val] if par else 0
                parent[node.val] = par
                dfs(node.left,node)
                dfs(node.right,node)

        dfs(root)
        # 只有当两个深度相同,但父节点不同的时候才是true
        return depth[x] == depth[y] and parent[x]!=parent[y]

在这里插入图片描述

学艺不精,还需努力💪

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值