题解 | #判断是不是平衡二叉树#

二叉搜索树的最近公共祖先

http://www.nowcoder.com/practice/d9820119321945f588ed6a26f0a6991f

这道题说是用递归/搜索与回溯,但是我的想法是用暴力求解,先在init中定义一个数据结构val_set,紧接着将以某个节点为根节点的树中的节点值加入到val_set中,使用函数isAncestor判断根节点是否为祖先,最后使用层序遍历,找到最近的根节点。 缺点是时间复杂度太高

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param root TreeNode类 
# @param p int整型 
# @param q int整型 
# @return int整型
#
class Solution:
    def __init__(self):
        self.val_set = set()
        
    def rootval(self, root):
        if root.left:
            self.rootval(root.left)
        self.val_set.add(root.val)
        if root.right:
            self.rootval(root.right)
        
        return self.val_set
    
    def isAncestor(self,root,p,q):
        if p in self.rootval(root) and q in self.rootval(root):
            print(self.rootval(root))  
            return True
        else:
            return False
    
    def lowestCommonAncestor(self , root: TreeNode, p: int, q: int) -> int:
        # write code here
        # 第一种方法:记录以某个节点为根节点的树,他的节点值中是否有目标值
        res = -1
        node = list()
        node.append(root)
        while node:
            temp = list()
            while node:
                node_temp = node.pop()
                if self.isAncestor(node_temp,p,q):
                    res = node_temp.val
                self.val_set.clear()
                if node_temp.left:
                    temp.append(node_temp.left)
                if node_temp.right:
                    temp.append(node_temp.right)
            node = temp
        
        return res   
            
全部评论

相关推荐

01-02 21:17
已编辑
西安理工大学 后端
程序员小白条:项目不太重要,你的优势的算法竞赛,然后多背相关的八股文,项目可以不作为重点考虑,面试可能就简单带过项目就行了,你可以直接写简历,背项目相关的八股文就行,也不用自己做,时间紧张的情况下,性价比最高
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务