作者: cookyo | 来源:发表于2019-04-16 17:09 被阅读0次
1 二叉树的最近公共祖先(leetcode 236)
class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        if (root is None) or (p is root) or (q is root):
            return root
        
        left = self.lowestCommonAncestor(root.left, p, q)
        right = self.lowestCommonAncestor(root.right, p, q)
        
        if left and right:
            return root
        if left and not right:
            return left
        else:
            return right
2 判断是否为平衡二叉树
class CheckBalance:
    def check(self, root):
        # write code here
        def depth(root):
            if root is None:
                return 0
            left = depth(root.left)
            right = depth(root.right)
            if abs(left - right) > 1:
                return -1
            return max(left+1, right+1)
        
        if depth(root) < 0:
            return False
        return True
3 判断二叉树是否为满二叉树
class CheckCompletion:
    def chk(self, root):
        # write code here
        if root is None:
            return True
        queue = []
        leafflag = 0
        queue.append(root)
        while len(queue):
            Node = queue.pop(0)
            if leafflag == 1:
                if Node.left or Node.right:
                    return False
                continue
            if Node.left:
                if Node.right:
                    queue.append(Node.left)
                    queue.append(Node.right)
                else:
                    leafflag = 1
            else:
                if Node.right:
                    return False
        return True
4 树节点间的最大距离
class LongestDistance:
    def findLongest(self, root):
        if root is None:
            return 0
        left = self.findLongest(root.left)
        right = self.findLongest(root.right)
        zhong = self.depth(root.left) + self.depth(root.right) + 1
        return max(left, right, zhong)
    def depth(self, root):
        if root is None:
            return 0
        left = self.depth(root.left)
        right = self.depth(root.right)
        return max(left,right) + 1
5 一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置
class FindErrorNode:
    def findError(self, root):
        # write code here
        middle_order = self.Middle(root)
        decrease_count = 0
        return_list = []
        for i in range(1,len(middle_order)):
            if middle_order[i]<middle_order[i-1]:
                decrease_count+=1
                return_list.append([middle_order[i-1],middle_order[i]])
        if decrease_count == 2:
            result = [max(return_list[0]),min(return_list[1])]
        if decrease_count == 1:
            result = [max(return_list[0]),min(return_list[0])]
        return [min(result),max(result)]
             
    def Middle(self,root):
        stack = []
        return_list = []
        x = root
        while (len(stack) or x):
            if x != None:
                stack.append(x)
                x = x.left
            else:
                temp = stack.pop()
                return_list.append(temp.val)
                x = temp.right
        return return_list
6 validate binary search tree
#method1 中序遍历
def isValidBST(self, root):
    inorder = self.inorder(root)
    return inorder == list(sorted(set(inorder)))
def inorder(self, root):
    if root is None:
        return []
    return self.inorder(root.left)+[root.val]+self.inorder(root.right)

#method2 
def isValidBST(self, root):
    self.prev = None
    return self.helper(root)

def helper(self, root):
    if root is None:
        return True
    if not self.helper(root.left):
        return False
    if self.prev and self.prev.val >= root.val:
        return False
    self.prev = root
    return self.helper(root.right)

相关文章

  • 水彩过程 | 树树树树

    练习了一下树的画法,用毛笔勾树干,扇形笔画树叶还是又快又方便的。因为不是写实风格,只要把树的意象画出来就可以,所以...

  • 树·树

    ​如果有来生,要做一棵树,站成永恒,没有悲欢姿势,一半在尘土里安详。一半在风里飞扬,一半洒落阴凉,一半沐浴阳光。 ...

  • 树,树……

    树,树…… ——洛尔迦 树,树, 枯了又绿。 脸蛋美丽的姑娘 在那里摘橄榄。 风,塔楼上的求爱者, 拦腰把她...

  • 橄榄树树树

    在建班级群的时候,我顺手打了三个树——橄榄树树树。是的,这是橄榄树第三次起航。 第一次,在北京,我说,我愿意在无人...

  • 树,与树

    (第一次学着简书里文友看图写诗,2020的图,各位讲究着看吧) 文/三少爷的糖 一颗树站在山头 遥望着远方,朦胧中...

  • 树,与树

    我不是一个很喜欢女生哭闹的人。 哭闹,意味着理智被情感摧毁。 理智没了,沟通渠道也就关闭了。 没有了沟通,剩下的就...

  • 树和树

    我的家门前有一棵柏树,不是什么稀罕的树,但它却挺直腰杆儿,坚定的伫立在我家门前,望着远方,似乎在等什么人又不像在等...

  • 树树秋声

    余秋雨说:生命,是一树花开,或安静或热烈,或寂寞或璀璨。日子,就在岁月的年轮中渐次厚重,那些天真的、跃动的、抑或沉...

  • 短篇‖树树

    这是一条幽静的古道,两旁尽是残垣断壁,竟也有一些台阶通向几栋还算有顶篷的石质的建筑物。我和我的伙伴着级上了一段...

  • 树树夜夜

    长夜唧唧夏虫前 长街相对两树闲 冠盖接云皆无语 此缘如可问苍天

网友评论

      本文标题:

      本文链接:https://www.haomeiwen.com/subject/xxuvwqtx.html