关于二叉树的递归求解三道很相似的题目
题目:二叉树的最大深度
题解:
1)使用迭代法,二叉树的深度就是根节点的高度。就是在左右子树中深度最大的那个+1。
2)注意用的是后序遍历,左右中,这样才能够从下往上计算二叉树的高度。
代码:
class Solution(object):dan
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
def digui(cur):
if not cur:
return 0
leftdepth = digui(cur.left)
rightdepth = digui(cur.right)
return 1+max(leftdepth, rightdepth)
return digui(root)
题目:二叉树的最小深度
题解
和上一题的解题思路有区别,不能直接去求左右子树中深度更小的,因为如果碰到极端情况,当一个子树为空,但它的最小深度也不是1。
- 要因此要特殊情况特殊判断,判断左右子树是否有一个为空的情况
2)最小深度是从根节点到最近叶子节点的最短路径上的节点数量。注意是叶子节点。
什么是叶子节点,左右孩子都为空的节点才是叶子节点!
代码:
class Solution(object):
def minDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
def digui(cur):
if not cur:
return 0
leftdepth = digui(cur.left)
rightdepth = digui(cur.right)
if cur.left and not cur.right:
return 1 + leftdepth
elif cur.right and not cur.left:
return 1 + rightdepth
else:
return 1+min(leftdepth, rightdepth)
return digui(root)
题目:完全二叉树的节点个数
题解:
用迭代分别计算左右子树的节点个数然后求和
代码:
class Solution(object):
def countNodes(self, root):
"""
:type root: TreeNode
:rtype: int
"""
def digui(cur):
if not cur:
return 0
leftnum = digui(cur.left)
rightnum = digui(cur.right)
return leftnum + rightnum + 1
return digui(root)