题目:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
区别DFS和BFS的不是栈和队列,而是在访问一个结点的时候是只把它相邻的下一个结点压进去还是把它相邻的所有节点压进去
递归法:
DFS(深度优先搜索)一头扎到底
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
class Solution {
public int maxDepth(TreeNode root) {
int max=0;
if(root==null){
return 0;
}else {
int left_height=maxDepth(root.left);
int right_height=maxDepth(root.right);
max=Math.max(left_height,right_height)+1;
}
return max;
}
}
迭代法:
BFS 利用队列获取树的深度
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
class Solution {
public int maxDepth(TreeNode root) {
Queue<AbstractMap.SimpleEntry<TreeNode,Integer>> queue=new LinkedList<>();
if(root!=null){
queue.add(new AbstractMap.SimpleEntry(root,1));
}
int depth=0;
while (!queue.isEmpty()){
AbstractMap.SimpleEntry<TreeNode,Integer> current=queue.poll();
root=current.getKey();
int currentdepth=current.getValue();
if(root!=null){
depth=Math.max(depth,currentdepth);
queue.add(new AbstractMap.SimpleEntry(root.left,currentdepth+1));
queue.add(new AbstractMap.SimpleEntry(root.right,currentdepth+1));
}
}
return depth;
}
}