代码随想录算法训练营第十五天| 104. 二叉树的最大深度 111. 二叉树的最小深度 222. 完全二叉树的节点个数

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值