博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode Tree 知识点总结
阅读量:4221 次
发布时间:2019-05-26

本文共 3792 字,大约阅读时间需要 12 分钟。

  • :返回由[1,2,…,n]组成的所有二叉搜索树的列表,Medium.

思路:先确定root,在递归获取root.left和root.right
# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution(object):    def generateTrees(self, n):        """        :type n: int        :rtype: List[TreeNode]        """        arrays = [i for i in range(1,n+1)]        return self.dp(arrays)    def dp(self,arrays):        if len(arrays) == 1:            return [TreeNode(arrays[0])]        ret = []        for k in range(len(arrays)):            num = arrays[k]            l = arrays[0:k]            r = arrays[k+1:]            left = self.dp(l)            right = self.dp(r)            if left == []:                for j in range(len(right)):                    Node = TreeNode(num)                    Node.right = right[j]                    ret.append(Node)            if right == []:                for i in range(len(left)):                    Node = TreeNode(num)                    Node.left = left[i]                    ret.append(Node)            for i in range(len(left)):                for j in range(len(right)):                    Node = TreeNode(num)                    Node.left = left[i]                    Node.right = right[j]                    ret.append(Node)        return ret

  • :交换树上两个节点的值,使得这棵树成为二叉搜索树。Hard

二叉搜索树的性质是中序遍历结果为有序数组,利用这个性质先获取原树中序遍历的结果,然后寻找最高波峰和最低低谷,再用dfs来修正原来的树即可
# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneimport sysclass Solution(object):    def recoverTree(self, root):        """        :type root: TreeNode        :rtype: void Do not return anything, modify root in-place instead.        """        stack = [root]        arrays = [-sys.maxint]        while(stack):            item = stack.pop()            if item.left == None and item.right == None:                arrays.append(item.val)            else:                if item.right:                    stack.append(item.right)                stack.append(TreeNode(item.val))                if item.left:                    stack.append(item.left)        arrays.append(sys.maxint)        val1,val2 = -sys.maxint,sys.maxint        for i in range(1,len(arrays)-1):            if arrays[i]>arrays[i-1] and arrays[i]>arrays[i+1] and arrays[i]>val1:                val1 = arrays[i]            if arrays[i]

  • :判断二叉树是否是有效的二叉搜索树,Medium

设置最大最小边界进行递归判断
# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneimport sysclass Solution(object):    def isValidBST(self, root):        """        :type root: TreeNode        :rtype: bool        """        min_ = -sys.maxint        max_ = sys.maxint        return self.checkBST(root,min_,max_)    def checkBST(self,root,min_,max_):        if root is None: return True        if root.val <= min_ or root.val >= max_:            return False        return self.checkBST(root.left,min_,root.val) and self.checkBST(root.right,root.val,max_)

  • :给树剪枝,如果该节点的值和其子孙节点的值均为0,则溢出该节点,Medium

计算节点的值为该节点的值+所有子孙节点值的和

# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution(object):    def pruneTree(self, root):        """        :type root: TreeNode        :rtype: TreeNode        """        if self.nodeValues(root) == 0: return None        root.left = self.pruneTree(root.left)        root.right = self.pruneTree(root.right)        return root    def nodeValues(self,root):        if root is None: return 0        return root.val+self.nodeValues(root.left)+self.nodeValues(root.right)

转载地址:http://pbqmi.baihongyu.com/

你可能感兴趣的文章
什么是脂肪
查看>>
形式主义
查看>>
前端学习(三)——CSS的三种写法与优先级
查看>>
@DynamicInsert使用问题
查看>>
Python邮件发送
查看>>
Ajax请求下,sendRedirect无效的问题
查看>>
python数据类型(python cookbook读书笔记一)
查看>>
python cookbook读书笔记二
查看>>
VS添加第三方C/C++库经验
查看>>
无法定位序数55于动态链接库zlib1.dll上
查看>>
sqlalchemy 这原生sql中绑定list
查看>>
rust所有权理解(备忘)
查看>>
Java使用redis+sse实现带频道的网络聊天室
查看>>
deepin下安装docker-ce
查看>>
深入理解java虚拟机读书笔记——基础知识篇
查看>>
深入java虚拟机读书笔记——类加载与方法调用中的分派机制
查看>>
面试中遇到的有趣的小问题
查看>>
akka分布式爬虫框架(一)——设计思路与demo
查看>>
docker搭建kafka
查看>>
spring的webflux初探
查看>>