104. 二叉树的最大深度
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) {
return res;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
List<Integer> level = new ArrayList<>();
for (int i = 0; i < size; i++) {
TreeNode cur = queue.poll();
level.add(cur.val);
if (cur.left != null) {
queue.offer((TreeNode) cur.left);
}
if (cur.right != null) {
queue.offer((TreeNode) cur.right);
}
}
res.add(level);
}
return res;
}
public int maxDepth(TreeNode root) {
List<List<Integer>> lists = this.levelOrder(root);
return lists.size();
}
111 .二叉树的最小深度
public int minDepth(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
List<Integer> path = new ArrayList<>();
List<Integer> res = new ArrayList<>();
dfs(root, path, result);
for (List<Integer> integers : result) {
res.add(integers.size());
}
int min = 0;
if (result.size() != 0) {
min = result.get(0).size();
} else {
return 0;
}
for (Integer integer : res) {
if (integer < min) {
min = integer;
}
}
return min;
}
//返回树的高度,传入当前节点,比较两个节点的高度,取最小的高度
//当前节点为空时终止搜索
//将搜索到高度+1返回
public void dfs(TreeNode node, List<Integer> path, List<List<Integer>> result) {
if (node == null) {
return;
}
// 将当前节点加入路径
path.add(node.val);
// 如果是叶子节点,则将完整路径添加到结果集中
if (node.left == null && node.right == null) {
result.add(new ArrayList<>(path));
}
// 继续DFS遍历左子树和右子树
dfs(node.left, path, result);
dfs(node.right, path, result);
// 回溯,移除当前节点
path.remove(path.size() - 1);
}
222.完全二叉树的节点个数
public int countNodes(TreeNode root) { List<TreeNode> ans = new ArrayList<>(); preOrder(root, ans); return ans.size(); } public void preOrder(TreeNode node, List<TreeNode> ans) { if (node == null) { return; } ans.add(node); preOrder(node.left, ans); preOrder(node.right, ans); }