Python版day21

530. 二叉搜索树的最小绝对差

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。

差值是一个正数,其数值等于两值之差的绝对值。

 

中序遍历 

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def __init__(self):
        self.prev =None
        self.result = float('inf')
    def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
        self.traversal(root)
        return self.result
    def traversal(self,node):
        if node is None:
            return 
        self.traversal(node.left)
        if self.prev is not None:
            self.result = min(self.result,abs(self.prev.val-node.val))
        self.prev = node
        self.traversal(node.right)

501. 二叉搜索树中的众数

给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。

如果树中有不止一个众数,可以按 任意顺序 返回。

假定 BST 满足如下定义:

结点左子树中所含节点的值 小于等于 当前节点的值
结点右子树中所含节点的值 大于等于 当前节点的值
左子树和右子树都是二叉搜索树

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-mode-in-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

中序遍历 

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def __init__(self):
        self.maxCount = 0
        self.count = 0
        self.pre = None
        self.result = []
    def searchBST(self,cur):
        if cur is None:
            return
        # 左
        self.searchBST(cur.left)
        # 中
        if self.pre is None:
            self.count = 1
        elif self.pre.val == cur.val:
            self.count += 1
        else:
            self.count =1
        self.pre = cur
        # 如果多个众数
        if self.count == self.maxCount:
            self.result.append(cur.val)
        # 如果计数大于最大值频率
        if self.count > self.maxCount:
            # 更新最大值频率
            self.maxCount = self.count
            # 清空result 重新开始
            self.result = [cur.val]
        # 右
        self.searchBST(cur.right)
        return
    def findMode(self, root: Optional[TreeNode]) -> List[int]:
       self.searchBST(root)
       return self.result

 236. 二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

后序遍历 

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        if root == q or root ==p or root is None:
            return root
        left = self.lowestCommonAncestor(root.left,p,q)
        right = self.lowestCommonAncestor(root.right,p,q)
        # 如果pq 出现在左右
        if left is not None and right is not None:
            return root
        # pq在右
        if  left is None and right is not None:
            return right
        # pq在左
        elif left is not None and right is None:
            return left
        else:
            return None

 

你可能感兴趣的:(python,数学建模,开发语言)