描述
Given a binary tree, find its maximum depth.
The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
Note: A leaf is a node with no children.
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数
一个二叉树,求其深度,只有一个根时,深度为1
例子
思路
方法1. DFS
递归,对于每个结点,其深度为:
如果为空,返回0
否则返回 1+maxDepth(左子树, 右子树)//1是本结点,所以层数加一
方法2. BFS
把每一层的所有结点依次放入队列(方便将一层所有的结点取出),从队列中取一层的结点,深度加1,对于每一层的每一个结点,如果有子节点,就将其子节点放入队列
答案
- 方法1 python
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if not root:
return 0
return 1+max(self.maxDepth(root.left), self.maxDepth(root.right))
- 方法2 python
from queue import Queue
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if not root:
return 0
q = Queue()
q.put(root)
count =0
while not q.empty():
L = q.qsize()
count += 1
for i in range(L):
temp = q.get()
if temp.left:
q.put(temp.left)
if temp.right:
q.put(temp.right)
return count
- 方法1 java
public int maxDepth(TreeNode root) {
if (root==null)
return 0;
return 1+Math.max(maxDepth(root.left), maxDepth(root.right));
}
- 方法2 java
import java.util.Queue;
class Solution {
public int maxDepth(TreeNode root) {
if (root==null)
return 0;
Queue<TreeNode> q = new LinkedList<TreeNode>();
q.offer(root);
int level = 0;
while (!q.isEmpty())
{
level += 1;
int L = q.size();//因为队列的长度在for中会改变,所以先把值取出来
for (int i=0; i<L; i++)
{
TreeNode node = q.poll();
if (node.left != null) //将非空结点放入队列
q.offer(node.left);
if (node.right != null)
q.offer(node.right);
}
}
return level;
}
}