二叉树的最大深度
"""
Author: leadingme
Mail:[email protected]
MyWebsite:leadingme.top
"""
"""
算法要求: 给定一颗二叉树,找其最大深度
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点
解题思路: 一般来说,有关于二叉树的问题都是使用递归解决,因为递归很容易理解,也不需要去管二叉树父节点,
子节点,孙节点等复杂关系,因此,只需要清除root节点的关系,其他的让它递归去吧
"""
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
def maxDepth(self, root: TreeNode) -> int:
"""
:param root:
:return:
"""
if root is None:
return 0
else:
return 1 + max(self.maxDepth(root.right), self.maxDepth(root.left))
验证二叉搜索数
"""
Author: leadingme
Mail:[email protected]
MyWebsite:leadingme.top
"""
"""
算法要求: 给定一颗二叉树,判断其是否是一颗有效的二叉搜索树
假设一颗二叉搜索树具有如下特征:
> 节点的左子数只包含小于当前节点的数
> 节点的右子数只包含大于当前节点的数
> 所有左子树和右子树自身必须也是二叉搜索树'
示例1:
输入:
2
/ \
1 3
输出: true
示例2:
输入:
5
/ \
1 4
/ \
3 6
输出: false
解释: 因为根节点的的值5比它的右子树的值还要大
"""
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
def isValidBST(self, root: TreeNode)-> bool:
import sys
min = sys.maxsize * (-1)
max = sys.maxsize
return self.ValidBST(root, min, max)
def ValidBST(self, root, min, max):
if root is None:
return True
if root.val <= min or root.val >= max:
return False
return self.ValidBST(root.left, min, root.val) and self.ValidBST(root.right, root.val, max)
判断对称二叉数
"""
Author: leadingme
Mail:[email protected]
MyWebsite:leadingme.top
"""
"""
算法要求: 给定一颗二叉树,检查它是否是镜像对称的
示例1:
输入: 1
/ \
2 2
/ \ / \
3 4 4 3
输出: true
示例2:
输入: 1
/ \
2 2
\ \
3 3
输出: false
解题思路:
假设root.left为L节点同时root.right为R节点,所谓对称要求的是L.right=R.left and L.left=R.right
"""
class TreeNode(object):
def __init__(self, root):
self.val = x,
self.left = None
self.right = None
def isSymmetric(self, root: TreeNode) -> bool:
if root is None:
return True
else:
return self.symmetricTree(root.left, root.right)
def symmetricTree(self, lNode, rNode):
if not lNode and not rNode:
return True
elif lNode and rNode and lNode.val == rNode.val:
return self.symmetricTree(lNode.right, rNode.left) and self.symmetricTree(lNode.left, rNode.right)
else:
return False