给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

二叉树的最大深度_深度优先遍历

该题目的主要目的就是考察我们对二叉树的广度优先遍历和深度优先遍历

我本人用的是深度优先遍历的方法,递归遍历,因为代码贼短

//Definition for a binary tree node.
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}

class Solution {

/**
* 时间复杂度:O(n)
* 空间复杂度:O(logN)
*/
public int maxDepth(TreeNode root) {

if(root == null){
return 0;
}
return Math.max(maxDepth(root.left),maxDepth(root.right))+1;
}
}

什么是深度优先遍历,什么又是广度优先遍历?

  • 广度优先遍历:
    广度优先遍历是从最底层或者最高层开始,向上或向下一层一层的访问每个节点,在每一层中按照从左到右或者从右到左访问每个节点
  • 深度优先遍历:
    深度优先遍历就是尽可能的向左或者向右进行,在遇到转折点时,向左或向右一步,然后继续向左或向右发展,直到访问结束。我们常见到的前中后序遍历就是深度优先遍历

实现

  • 广度优先遍历
/**
* 广度优先遍历
* @param root
*/
private void breadthOrder(TreeNode root){

ArrayList<T> list = new ArrayList<>();
Queue<TreeNode> queue = new ArrayDeque<>();
if(root != null){
queue.add(root);

while(!queue.isEmpty()){
root = queue.remove();
list.add(root.val);
if(root.left != null){
queue.add(root.left);
}
if(root.right != null){
queue.add(root.right);
}
}
}
for(T i : list) {
System.out.println(i);
}
}
  • 深度优先遍历非递归实现请参考:
    ​相同的树