刷题day6

1 二叉树的最大深度

一般来说涉及二叉树的题目都是使用递归。

class Node(object):
	def __init__(self,node):
		self.elem =node
		self.left = None
		self.right = None
class solution(object):
	def maxdeepth(self,root):
		if root == None:
			return 0
		else:
			return 1 + max(max(self.maxdeepth(root.right),self.maxdeepth(root.left))

2 验证二叉搜索树

二叉搜索树有以下特征:

  • 节点的左子树只包含小于当前节点的数
  • 节点的右子树只包含大于当前节点的数
  • 所有的子树自身必须是二叉搜索树
class Treenode(object):
	def __init__(self,item):
		self.elem = item
		self.left = None
		self.right = None
class solution(object):
	def isvalidbst(self,root):
		import sys
		min = sys.maxsize * (-1)
		max = sys.maxsize
		return self.validbst(root,min,max)
	def validbst(self,min,max):
		if root == None:
			return True
		if root.elem <= min or root.elem >= max:
			return False
		return self.validbst(root.left,min,root.val) and self.validbst(root.right,root.val,max)
		# 左子树的数 小于 根节点 小于 右子树
		

3 将有序数组转换成二叉搜索树

将一个按照升序排列的有序数组转换成一颗高度平衡二叉树
在平衡二叉树中,root的节点值必定是一个最平衡的值,既不是列表中最大的,也不是列表中最小的,必定是有序数组中间的那个。

class TreeNode(object):
	def __init__(self,node):
		self.elem = node
		self.left = None
		self.right = None
class solution(object):
	def arraytobst(self,nums):
		if not nums:
			return None
		mid = len(nums) // 2
		root = TreeNode(nums[mid])
		root.left = self.arraytobst(nums[:mid])
		root.right = self.arraytobst(nums[mid+1:])
		return root
		
		
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页