1.树的直径
distance = 0
def dfs(root):
if root is None:
return 0
left = dfs(root.left)
right = dfs(root.right)
global distance
distance = max(left+right, distance)
return max(left,right) + 1
def diameter_of_binarytree(root):
dfs(root)
return distance
2.树的最大深度
def max_depth(root):
if root is None:
return 0
else:
left_height = max_depth(root.left)
right_height = max_depth(root.right)
return max(left_height, right_height) + 1
3. 判断树的路径和是否为某数
def has_path_sum(root, num):
if root is None:
return False
num -= root.val
if root.left is None and root.right is None:
return num == 0
return has_path_sum(root.left,num) or has_path_sum(root.right,num)
4.有序链表转二叉搜索树
def find_mid(head):
"""找出中间的数"""
prev = None
slow = head
fast = head
while fast and fast.next:
prev = slow
slow = slow.next
fast = fast.next.next
if prev:
prev.next = None
return slow
def list2bst(head):
"""主函数"""
if not head:
return None
mid = find_mid(head)
node = TreeNode(mid.val)
if head == mid:
return node
node.left = list2bst(head)
node.right = list2bst(mid.next)
return node
5.有序数组转二叉搜索树
def array2bst(nums,start,end):
if start == end:
return None
mid = (start + end)//2
node = TreeNode(nums[mid])
node.left = array2bst(nums,start,mid)
node.right = array2bst(nums,mid+1,end)
return node