方法一:递归
思路:
(1)若树为空,则直接返回0。
(2)否则返回左子树的最大高度和右子树的最大高度的较大值+1。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int maxDepth(TreeNode root) {
if (root == null)
return 0;
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}
}
Runtime:1ms
思路:
(1)若树为空,则直接返回0。
(2)创建一个队列queue,用于存放所有节点,把根节点加入队列,用maxDepth记录最大高度。
(3)遍历队列,队列里的节点正是当前层得到节点,队列长度正是当前层的节点个数,遍历当前层的所有节点,若其左孩子不为空,则左孩子加入队列,若其右孩子不为空,则右孩子加入队列。注意每一层处理时需要先把队列长度保存在变量中,否则内层循环会导致队列长度递减。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int maxDepth(TreeNode root) {
if (root == null)
return 0;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
int maxDepth = 0;
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
if (node.left != null)
queue.add(node.left);
if (node.right != null)
queue.add(node.right);
}
maxDepth++;
}
return maxDepth;
}
}
Runtime:2ms