【深度优先】【广度优先】Leetcode 104 二叉树的最大深度 Leetcode 111 二叉树的最小深度 Leetcode 110 平衡二叉树

这篇具有很好参考价值的文章主要介绍了【深度优先】【广度优先】Leetcode 104 二叉树的最大深度 Leetcode 111 二叉树的最小深度 Leetcode 110 平衡二叉树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

二叉树节点的深度:
指从根节点到该节点的最长简单路径边的条数或者节点数
(取决于深度从0开始还是从1开始)
二叉树节点的高度:
指从该节点到叶子节点的最长简单路径边的条数后者节点数
(取决于高度从0开始还是从1开始)

【前序求的是深度,后序求的是高度】

---------------🎈🎈题目链接🎈🎈-------------------

Leetcode 104 二叉树的最大深度

解法1 深度优先 递归法 后序:左右中

即先求左子树高度,再求右子树高度,再取最大返回给根节点
返回最大深度也就是求根节点的高度

时间复杂度O(N)
空间复杂度O(N)文章来源地址https://www.toymoban.com/news/detail-826531.html

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int maxDepth(TreeNode root) {
        // 返回最大深度也就是求根节点的高度
        // 采用深度优先 递归法 后序:左右中 即先求左子树高度,再求右子树高度,再取最大返回给根节点
        if(root == null) return 0;
        // 左
        int leftdepth = maxDepth(root.left);
        // 右
        int rightdepth = maxDepth(root.right);
        // 中
        return 1 + Math.max(leftdepth,rightdepth);
    }
}      
    

解法2 广度优先:层序遍历

时间复杂度O(N)
空间复杂度O(N)


/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int maxDepth(TreeNode root) {
        // 层序遍历
        Queue<TreeNode> myqueue = new LinkedList<>();
        if(root == null) return 0;
        myqueue.add(root);
        int result = 0;
        while(!myqueue.isEmpty()){
            int size = myqueue.size();
            for(int i = 0; i < size; i++){
                TreeNode temp = myqueue.poll();
                if(temp.left != null){
                    myqueue.add(temp.left);
                }
                if(temp.right != null){
                    myqueue.add(temp.right);
                }
            }
            result +=1;
        }
        return result;

    }
}

Leetcode 111 二叉树的最小深度

---------------🎈🎈题目链接🎈🎈-------------------

解法1 深度优先:递归 后序遍历 左右中

这里要特别注意⭐️
最小深度—— 根节点到叶子节点的长度【左右孩子都为null的才是叶子结点】
/1.如果左子树为空,右子树不为空,最小深度是 1 + 右子树的深度。
/2.如果右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。
/3.如果左右子树都不为空,返回左右子树深度最小值 + 1 。

时间复杂度O(N)
空间复杂度O(N)

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int minDepth(TreeNode root) {
        // 深度优先遍历 递归 后序遍历 左右中
        // 最小深度—— 根节点到叶子节点的长度【左右孩子都为null的才是叶子结点】
        // 1.如果左子树为空,右子树不为空,最小深度是 1 + 右子树的深度。
        // 2.如果右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。
        // 3.如果左右子树都不为空,返回左右子树深度最小值 + 1 。

        if(root == null) return 0; //递归终止条件,遇到null返回0,表示当前的节点的高度为0
        int leftdepth = minDepth(root.left); // 左
        int rightdepth = minDepth(root.right); // 右
        if(root.left == null){return 1+rightdepth;}
        else if(root.right == null){return 1+leftdepth;}
        else{
            return 1+Math.min(leftdepth,rightdepth);
        }
        
    }
    
}

解法2 广度优先:层序遍历

时间复杂度O(N)
空间复杂度O(N)

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int minDepth(TreeNode root) {
        // 层序遍历
        Queue<TreeNode> myqueue = new LinkedList<>();
        if(root == null) return 0;
        myqueue.add(root);
        int result = 0;
        while(!myqueue.isEmpty()){
            int size = myqueue.size();
            for(int i = 0; i < size; i++){
                TreeNode temp = myqueue.poll();
                if(temp.left != null){
                    myqueue.add(temp.left);
                }
                if(temp.right != null){
                    myqueue.add(temp.right);
                }
                if(temp.left == null && temp.right==null){
                    return result+1;
                }
            }
            result +=1;
        }
        return result;

    }
}
       


Leetcode 110 平衡二叉树

【深度优先】【广度优先】Leetcode 104 二叉树的最大深度 Leetcode 111 二叉树的最小深度 Leetcode 110 平衡二叉树,Leetcode,深度优先,宽度优先,leetcode,数据结构,java,算法,职场和发展

解法1 深度优先,求高度则用后序遍历:不断将左右子树的高度返回给根节点

1 明确递归函数的参数和返回值
参数:当前传入节点。 返回值:以当前传入节点为根节点的树的高度。
2 明确终止条件
递归的过程中依然是遇到空节点了为终止,返回0,表示当前节点为根节点的树高度为0
3 明确单层递归的逻辑
如何判断以当前传入节点为根节点的二叉树是否是平衡二叉树呢?当然是其左子树高度和其右子树高度的差值。
分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。

时间复杂度O(N)
空间复杂度O(N)

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isBalanced(TreeNode root) {
        int height = getHeight(root);
        if(height != -1) return true;
        else return false;

    }
    public int getHeight(TreeNode root){ // 参数和返回值
        if(root == null) return 0;  // 明确终止条件 递归的过程中遇到空节点终止,返回0,表示当前节点为根节点的树高度为0
        int leftheight = getHeight(root.left); // left
        if(leftheight == -1){
            return -1;
        }
        int rightheight = getHeight(root.right); // right
        if(rightheight == -1){
            return -1;
        }
        if(Math.abs(leftheight-rightheight) >1) return -1;  // root
        else{return Math.max(leftheight,rightheight)+1;}



    }
}

到了这里,关于【深度优先】【广度优先】Leetcode 104 二叉树的最大深度 Leetcode 111 二叉树的最小深度 Leetcode 110 平衡二叉树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode做题笔记104. 二叉树的最大深度

    给定一个二叉树  root  ,返回其最大深度。 二叉树的  最大深度  是指从根节点到最远叶子节点的最长路径上的节点数。 本题要求二叉树的最大深度,可想到将左子树深度和右子树深度分别记录下来,最后比较左右子树深度输出最大深度 本题考察二叉树的应用,将左右子树

    2024年02月11日
    浏览(35)
  • 【完全二叉树节点数!】【深度优先】【广度优先】Leetcode 222 完全二叉树的节点个数

    ---------------🎈🎈题目链接🎈🎈------------------- 完全二叉树只有两种情况: 情况一:就是满二叉树, 情况二:最后一层叶子节点没有满。 对于情况一,可以直接用 2 ^ 树深度 - 1 来计算,注意这里根节点深度为1。 对于情况二,分别递归左孩子,和右孩子,递归到某一深度一

    2024年02月19日
    浏览(26)
  • 算法训练day16Leetcode104二叉树最大深度111二叉树最小深度222完全二叉树的节点个数

    https://www.bilibili.com/video/BV1Gd4y1V75u/?vd_source=8272bd48fee17396a4a1746c256ab0ae 用递归,但是什么顺序没想清楚 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始) 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边

    2024年01月16日
    浏览(31)
  • 代码随想录 Day13 二叉树 LeetCode T104 二叉树的最大深度 T111 二叉树的最小深度 T222完全二叉树的节点个数

    以下题解的更详细思路来自于:代码随想录 (programmercarl.com) 二叉树的高度与深度 这里先补充一下二叉树深度和高度的概念 高度:二叉树中任意一个节点到叶子结点的距离 深度:二叉树中任意一个节点到根节点的距离 下面给出一个图便于理解 获取高度与深度的遍历方式 高度:后

    2024年02月08日
    浏览(32)
  • 求二叉树的最小深度(深度优先和广度优先)

    自己建一个二叉树,然后分别使用深度优先和广度优先找到二叉树的最小深度。 代码中有注释哦~

    2024年02月12日
    浏览(32)
  • leecode104——二叉树的最大深度

    左子树与右子树的最大深度可以通过递归遍历(深度优先搜索)得到,首先: 递归三部曲:(1)确定递归的参数和返回值,因为要比较的是左右子树的最大深度,所以每次传入的根节点,返回最大深度,即int类型的数字 (2)递归的终止条件:当跟节点为空,说明高度为0或

    2024年02月03日
    浏览(29)
  • 第十五天|104.二叉树的最大深度、111.二叉树的最小深度、 222.完全二叉树的节点个数

    104.二叉树的最大深度 题目链接:104. 二叉树的最大深度 - 力扣(LeetCode) 111.二叉树的最小深度 题目链接:111. 二叉树的最小深度 - 力扣(LeetCode) 222.完全二叉树的节点个数 题目链接:222. 完全二叉树的节点个数 - 力扣(LeetCode)

    2024年02月11日
    浏览(26)
  • 力扣HOT100 - 104. 二叉树的最大深度

    解题思路:

    2024年04月23日
    浏览(29)
  • C++力扣题目104--二叉树的最大深度

    给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 返回它的最大深度 3 。 看完本篇可以一起做了如下两道题目: 104.二叉树的最大深度(opens n

    2024年01月16日
    浏览(53)
  • 【数据结构】二叉树的·深度优先遍历(前中后序遍历)and·广度优先(层序遍历)

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 个人主页 :阿然成长日记 👈点击可跳转 📆 个人专栏: 🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 (1) 先序遍历 的过

    2024年01月24日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包