题目:
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
解法:
方法一:递归法
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
# 当 root 为空,说明已越过叶节点,因此返回 深度 00
if not root: return 0
return max(self.maxDepth(root.left),self.maxDepth(root.right))+1
方法二:层序遍历
每遍历一层,则计数器 +1+1 ,直到遍历完成,则可得到树的深度。
- queue开始存放root结点,之后新的一轮将tmp中数据放入queue
- tmp里存放queue中所有结点对应是左右结点
- 遍历完queue里结点的左右结点之后 dep+=1 queue=tmp
class Solution(object):
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root: return 0
# queue tmp里直接存放的是结点TreeNode
queue=[root]
dep=0
while queue:
# tmp=[] 每次增加左右结点前要清空
tmp=[]
for node in queue:
# 如果没有左右结点就不添加。tmp里就为空复制给queue也为空。就会退出while循环
if node.left:
tmp.append(node.left)
if node.right:
tmp.append(node.right)
dep+=1
queue=tmp
return dep