把刷题时候遇到的经典二叉树问题用python记录一下下~方便复习啦。
一篇文章搞定面试中的二叉树题目(java实现)https://zhuanlan.zhihu.com/p/61445865
# -*- coding:utf-8 -*-
class TreeNode:
def __init__(self,x):
self.val = x
self.left = None
self.right = None
# 1. 求二叉树的最大深度
def maxDepth(node):
if node == None:
return 0
return 1 + max(maxDepth(node.left),maxDepth(node.right))
# 2. 求二叉树的最小深度
def getMinDepth(root):
if root == None:
return 0
if root.left == None and root.right == None:
return 1
else:
return max(getMinDepth(root.left),getMinDepth(root.right)) + 1
# 3. 求二叉树中结点的个数
def numOfTreeNode(root):
if root == None:
return 0
left = numOfTreeNode(root.left)
right = numOfTreeNode(root.right)
return left + right + 1
# 4. 求二叉树中叶子结点的个数
def numsOfNoChildNode(root):
if root == None:
return 0
if root.left == None and root.right == None:
return 1
return numsOfNoChildNode(root.left) + numsOfNoChildNode(root.right)
# 5. 求二叉树中第k层节点的个数
def numsOfKLevelTreeNode(root,k):
if root == None or k < 1:
return 0
if k == 1:
return 1
return numsOfKLevelTreeNode(root.left,k - 1) + numsOfKLevelTreeNode(root.right,k - 1)
# 6. 判断二叉树是否是平衡二叉树
def isBalanced(node):
return maxDepth2(node) != -1
def maxDepth2(node):
if node == None:
return 0
left = maxDepth2(node.left)
right = maxDepth2(node.right)
if left == -1 or right == -1 or abs(left - right)> 1:
return -1
return max(left,right) + 1
# 7. 判断二叉树是否是完全二叉树
def isCompleteTreeNode(root):
if root =