<递归解法><深搜><DFS>
题目描述
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
,
3 / 9 20 / 15 7
返回它的最大深度 3 。
解题思路
迭代1
借助额外变量,广搜
class Solution(object): def maxDepth(self, root): """ :type root: TreeNode :rtype: int """ deep=0 que=[] que.append(root) if root is None: return 0 while len(que): ActDeepLength=len(que) #设计一个循环把这一层的节点全pop出去,外循环则从下一层的节点开始 while ActDeepLength: ActNode=que.pop(0) ActDeepLength-=1 if ActNode.left is not None: que.append(ActNode.left) if ActNode.right is not None: que.append(ActNode.right) deep+=1 return deep
迭代2
借助额外空间,广搜
class Solution(object): def maxDepth(self, root): """ :type root: TreeNode :rtype: int """ deep=0 que=[] que.append(root) if root is None: return 0 while len(que): #构造一个容器nextque来装当前节点下一层的所有元素 nextque=[] for node in que: if node.left is not None:nextque.append(node.left) if node.right is not None:nextque.append(node.right) #下次循环就遍历下一层的元素 que=nextque deep+=1 return deep
递归!!
在leetcode题解看到一篇文章:用一个递归套路来解决二叉树路径问题。
文章提到自底向上的思考方法,符合这道题的官方题解思路。
def maxDepth(self, root): """ :type root: TreeNode :rtype: int """ if not root: return 0 left = self.maxDepth(root.left) right = self.maxDepth(root.right) return max(left,right)+1
总结
1.看懂递归代码是一个层面,那么如何去设计递归呢?
这是我一直疑惑的点,代码层面已经能够理解,个人认为下一步应该多刷题,见识各种各样的递归设计思路,期待量变到质变。