1. 使用DFS解法
递归计算每颗字数的最大深度
时间O(n)(每个节点都要被遍历一次),空间O(h)(与递归深度有关,递归深度又与二叉树高度相关)
public int maxDepth(TreeNode root) { if (root==null) return 0; int left = maxDepth(root.left); int right = maxDepth(root.right); // 比较左右子树的最大深度,并加上根节点的高度 return Math.max(left,right)+1; }
2. 使用BFS解法
广度优先遍历的方案,我们使用2层循环,一个循环控制整棵树所有节点是否遍历完比
第二层循环控制每一层的节点是否遍历完毕。
时间O(n)(每个元素都遍历一遍),空间O(m)(m为整棵树节点最对的一层的节点数,最坏情况下完全二叉树叶子节点个数n/2)
public int maxDepth(TreeNode root) { if (root==null) return 0; Deque<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(root); int res=0; while(!queue.isEmpty()){ int size = queue.size(); // 获取当前队列中的节点个数,即获取整棵树每一层的节点个数 while(size>0){ TreeNode temp = queue.poll(); if(temp.left!=null) queue.add(temp.left); if(temp.right!=null) queue.add(temp.right); // 本层节点-1 size--; } // 每扫描完一层需要将相应深度+1 res++; } return res; }