首页 > 其他分享 >LeetCode之二叉树

LeetCode之二叉树

时间:2023-11-22 21:14:05浏览次数:35  
标签:right return m1 二叉树 root LeetCode left

发现新天地,欢迎访问Cr不是铬的个人网站

平衡二叉树

file

做这一道题目我们要考虑到平衡二叉树的定义。也就是一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
关于一个结点的高度计算我们很容易用递归得出,那么我们用递归遍历加上这个判断条件即可.

class Solution {
public:
    int getHeight(TreeNode*root)
    {
        if(root == nullptr)return 0;
        return max(getHeight(root->left),getHeight(root->right)) + 1;
    } 
    bool isBalanced(TreeNode* root) {
        if(root == nullptr)
            return true;
        return abs(getHeight(root->left) - getHeight(root->right))<=1 && isBalanced(root->left)&&isBalanced(root->right);
    }
};

二叉树的最小深度

file
上面一题我们讲的是关于高度,这个题就是求最小的深度。
关于这个题我们划分有三种情况

  • root为空,直接返回0
  • root->left和root->rigth中有一个为空,我们只要返回不为0的那个深度+1就行
  • roo->left与root->rigth都不为空,直接返回两者较小的+1

代码:

class Solution {
   public:
		int minDepth(TreeNode root) {
        if(root == null) return 0;
        //1.左孩子和有孩子都为空的情况,说明到达了叶子节点,直接返回1即可
        if(root.left == nullpter && root.right == nullpter) return 1;
        //2.如果左孩子和由孩子其中一个为空,那么需要返回比较大的那个孩子的深度        
        int m1 = minDepth(root.left);
        int m2 = minDepth(root.right);
        //这里其中一个节点为空,说明m1和m2有一个必然为0,所以可以返回m1 + m2 + 1;
        if(root.left == null || root.right == null) return m1 + m2 + 1;
        
        //3.最后一种情况,也就是左右孩子都不为空,返回最小深度+1即可
        return min(m1,m2) + 1; 
    }
}

本文由博客一文多发平台 OpenWrite 发布!

标签:right,return,m1,二叉树,root,LeetCode,left
From: https://www.cnblogs.com/xiaocrblog/p/17850307.html

相关文章

  • 【11月LeetCode组队打卡】Task3--BinaryTree
    树基本术语:节点的度:叶子节点=0分支节点:含有的子树个数节点关系:父,子,兄节点层次:根节点:1floor路径:两节点间经过的节点序列路径长度:路径上的边数树的分类:节点子树是否可以互换位置:有序树:从左到右各子树依次有序(不能互换无序树二叉......
  • LeetCode-Java:88合并两个有序数组
    题目:给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1......
  • 数据结构之二叉树的遍历3(java)
    一:概述绝大多数的可以用递归解决问题,也可以使用另一种数据结构来解决,这种数据结构就是栈。因为递归和栈都有回溯的特性。二:具体说明如何借助栈来实现二叉树的遍历,下面以二叉树的前序遍历为例,来阐述具体过程。<1>首先遍历二叉树的根节点1,放入栈中。<2>遍历根节点1的左孩子节点2,放入......
  • leetcode324场周赛
    一、使三个字符串相等给你三个字符串s1、s2和s3。你可以根据需要对这三个字符串执行以下操作任意次数。在每次操作中,你可以选择其中一个长度至少为2的字符串并删除其最右位置上的字符。如果存在某种方法能够使这三个字符串相等,请返回使它们相等所需的最小操作次数......
  • [LeetCode] 1361. Validate Binary Tree Nodes 验证二叉树
    Youhave n binarytreenodesnumberedfrom 0 to n-1 wherenode i hastwochildren leftChild[i] and rightChild[i],return true ifandonlyif all thegivennodesform exactlyone validbinarytree.Ifnode i hasnoleftchildthen leftCh......
  • 【11月LeetCode组队打卡】Task2--TrieTree
    字典树Trie音同try,又称前缀树,是一颗有根树,根节点到树节点的一个路径就代表一个单词,多用于关键词检索,自动补完和拼写检查用空间换时间:借公共前缀来降低查询时间的开销根节点无内容(参考:字典树TrieTree图文详解——CSDN实现Trie题解——力扣)208.实现Trie复习一下this......
  • 构建二叉树
    构建二叉树本文图文并茂讲解从前序遍历、中序续遍历构建二叉树或者从后序遍历、中序续遍历又或者从前序遍历、后序续遍历构建二叉树的原理,比附上相关的习题。图解链接:飞书图解链接......
  • 变长子网划分问题的二叉树解法
    计网的变长子网划分、计组的变长操作码划分、数据结构的哈夫曼编码,都是前缀编码的本质(变长操作码的二叉树解法我还在琢磨中)【二叉树解法】每条从叶结点到根节点的路径上有且只有一个被分配的结点:【例】现将一个IP网络划分成4个子网,若其中一个子网是172.16.1.128/26,则下列网络中......
  • 数据结构之二叉树的遍历2(java)
    一:概述二叉树的深度遍历3种方式:前序遍历、中序遍历、后序遍历。下面是具体的这三种方式的遍历代码。二:具体概述用递归的方式实现前序遍历、中序遍历、后序遍历。publicclassTreeNodeTraveral{/***构建二叉树**@paraminputList输入序列*/......
  • 【11月LeetCode组队打卡】Task2--String & StringMatch
    在CSP里面好多道“水题“基本都离不开字符串/数组的模拟滚动哈希,字典树,DP几个强强联合基本可以横扫所有难度的字符串算法了,所以在这个task里会好好消化其中前二字符串和数组有很多相似之处,比如同样使用下标的方式来访问单个字符。根据字符串的特点,将字符串问题分为以下几种:字......