LeetCode 题目-993. 二叉树的堂兄弟节点/1022. 从根到叶的二进制数之和(python实现)

  • Post author:
  • Post category:python



作为要准备踏入码农行业的人来说,要准备校招,怎么能不去刷刷LeetCode呢?


993. 二叉树的堂兄弟节点

  • 题目要求

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

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

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

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

  • 例如
省略
  • 分析

方法:根据题目要求,要不同的父节点且在同一层存在两个xy才返回True,进行层次遍历判断即可

class Solution(object):
    def isCousins(self, root, x, y):
        first_list=[]
        first_list.append(root)
        if root is None:
            return False
        while first_list:
            fast = []
            length=len(first_list)
            for i in range(length):
                node=first_list.pop(0)
                if node.left and node.right:
                    if x in[node.left.val,node.right.val ] and y  in[node.left.val,node.right.val ] :
                        return False
                if node.left:
                    first_list.append(node.left)
                    fast.append(node.left.val)
                if node.right:
                    first_list.append(node.right)
                    fast.append(node.right.val)
            if x in fast and y in fast:
                return True
        return False


1022. 从根到叶的二进制数之和

  • 题目要求

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

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

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

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

  • 例如
输入:[1,0,1,0,1,0,1]
输出:22
解释:(100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22
  • 分析

方法:深度遍历返回每个从根到叶子节点的路径保存进列表,最后将列表路径转换为

class Solution(object):
    def isCousins(self, root, x, y):
        first_list=[]
        first_list.append(root)
        if root is None:
            return False
        while first_list:
            fast = []
            length=len(first_list)
            for i in range(length):
                node=first_list.pop(0)
                if node.left and node.right:
                    if x in[node.left.val,node.right.val ] and y  in[node.left.val,node.right.val ] :
                        return False
                if node.left:
                    first_list.append(node.left)
                    fast.append(node.left.val)
                if node.right:
                    first_list.append(node.right)
                    fast.append(node.right.val)
            if x in fast and y in fast:
                return True
        return False



版权声明:本文为qq_39884947原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。