题目:输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
解题思路:
不要被“路径”两个字绊住,看到“路径”就开始构思如何列出所有路径,实际上这道题只需要求深度,跟路径没有太大的关系
思路一:树的深度与左、右子树深度的关系
树的深度 = 左子树的深度和右子树的深度中的最大值+1
因此只需要求出左子树的深度和右子树的深度,再取最大值然后+1即可。而求左子树的深度和右子树的深度的过程直接可以用递归代替:
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if not root:
return 0
return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1
思路二:用层序遍历遍历二叉树的每一层,然后设定一个计数器计算二叉树的层数,层数=深度
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if not root:
return 0
queue = [root]
num = 0
while queue:
tmp = []
for node in queue:
if node.left: tmp.append(node.left)
if node.right: tmp.append(node.right)
queue = tmp
num += 1
return num