二叉树
继续把昨天剩的两道打完。
104. 二叉树的最大深度
层次遍历迭代
class Solution {
public int maxDepth(TreeNode root) {
int depth = 0;
Deque<TreeNode> queue = new LinkedList<>();
if (root != null) queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode cur = queue.poll();
if (cur.left != null) queue.offer(cur.left);
if (cur.right != null) queue.offer(cur.right);
}
depth++;
}
return depth;
}
}

后序遍历递归
class Solution {
public int maxDepth(TreeNode root) {
return getDepth(root, 0);
}
private int getDepth(TreeNode root, int depth) {
if (root == null) return 0;
//左右中
return Math.max(getDepth(root.left, depth), getDepth(root.right, depth)) + 1;
}
}

111. 二叉树的最小深度
class Solution {
public int minDepth(TreeNode root) {
int res = 0;
Deque<TreeNode> queue = new LinkedList<>();
if (root != null) {
queue.offer(root);
res++; //包括自身
}
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode cur = queue.poll();
//存在无子结点的结点,找到最小深度
if (cur.left == null && cur.right == null) return res;
if (cur.left != null) queue.offer(cur.left);
if (cur.right != null) queue.offer(cur.right);
}
res++; //该层不存在无子结点的结点。
}
//空树返回
return res;
}
}

同样可以使用递归
class Solution {
public int minDepth(TreeNode root) {
return getDepth(root, 0);
}
private int getDepth(TreeNode root, int depth) {
if (root == null) return 0;
//左右中 null + right + mid left + null + mid left + right + mid
if (root.left == null && root.right != null) return getDepth(root.right, depth) + 1;
if (root.left != null && root.right == null) return getDepth(root.left, depth) + 1;
return Math.min(getDepth(root.left, depth), getDepth(root.right, depth)) + 1;
}
}


浙公网安备 33010602011771号