我是靠谱客的博主 潇洒小蘑菇,最近开发中收集的这篇文章主要介绍代码随想录训练营day16,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

题目一:二叉树的最大深度

解法一:递归

解法二:迭代

题目二:二叉树的最小深度

解法一:递归

解法二:迭代 

题目三:完全二叉树的节点个数

解法一:递归

解法二:迭代


题目一:二叉树的最大深度

力扣题目链接

题目描述:给定一个二叉树,找出其最大深度。

思路分析:(详情见代码随想录)

根节点的高度就是二叉树的最大深度,采用后序遍历

解法一:递归


class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) return 0; // 叶子节点的高度为一,空节点高度则为0
        int leftDepth = maxDepth(root.left);
        int rightDepth = maxDepth(root.right);
        // 处理逻辑放在最后,可以把叶子节点的高度返回给它的父节点,进行加一操作,可得出父节点的高度
        return Math.max(leftDepth, rightDepth) + 1; 
    }
}

解法二:迭代


class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) return 0;
        Deque<TreeNode> deque = new LinkedList<>();
        deque.offer(root);
        int depth = 0;
        while (!deque.isEmpty()) {
            int size = deque.size();
            depth++;
            for (int i = 0; i < size; i++) {
                TreeNode node = deque.poll();
                if (node.left != null) deque.offer(node.left);
                if (node.right != null) deque.offer(node.right);
            }
        } 
        return depth;
    }
}

题目二:二叉树的最小深度

力扣题目链接

题目描述:给定一个二叉树,找出其最小深度

思路分析:

最小深度是从根节点到最近叶子节点的最短路径上的节点数量,找到最低点是解题关键

解法一:递归


class Solution {
    public int minDepth(TreeNode root) {
        if (root == null) return 0;
        int leftDepth = minDepth(root.left); // 左
        int rightDepth = minDepth(root.right); // 右
        // 中
        // 当一个左子树为空,右不为空,这时并不是最低点
        if (root.left == null) {
            return rightDepth + 1;
        }
        // 当一个右子树为空,左不为空,这时并不是最低点
        if (root.right == null) {
            return leftDepth + 1;
        }
        // 左右节点都不为空 
        return Math.min(leftDepth, rightDepth) + 1;
    }
}

解法二:迭代 


class Solution {
    public int minDepth(TreeNode root) {
        if (root == null) return 0;
        Deque<TreeNode> deque = new LinkedList<>();
        deque.offer(root);
        int depth = 0;
        while (!deque.isEmpty()) {
            int size = deque.size();
            depth++;
            for (int i = 0; i < size; i++) {
                TreeNode node = deque.poll();
                if (node.left == null && node.right == null) { // 叶子节点直接返回depth
                    return depth;
                }
                if (node.left != null) {
                    deque.offer(node.left);
                }
                if (node.right != null) {
                    deque.offer(node.right);
                }
            }
        }
        return depth;
    }
}

题目三:完全二叉树的节点个数

力扣题目链接

题目描述:给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。

思路分析:(视频指路)

先搞清楚完全二叉树的定义,采用递归法、迭代法解题即可

解法一:递归

// 精简版
class Solution {
    public int countNodes(TreeNode root) {
        if (root == null) return 0;
        return countNodes(root.left) + countNodes(root.right) + 1;
    }
}

解法二:迭代


class Solution {
    public int countNodes(TreeNode root) {
        if (root == null) return 0;
        Deque<TreeNode> deque = new LinkedList<>();
        deque.offer(root);
        int res = 0;
        while (!deque.isEmpty()) {
            int size = deque.size();
            while (size > 0) {
                TreeNode cur = deque.poll();
                res++;
                if (cur.left != null) deque.offer(cur.left);
                if (cur.right != null) deque.offer(cur.right);
                size--;
            }
        }
        return res;
    }
}

最后

以上就是潇洒小蘑菇为你收集整理的代码随想录训练营day16的全部内容,希望文章能够帮你解决代码随想录训练营day16所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部