剑指offer——61平衡二叉树】的更多相关文章

题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树.   题解: 方法一:使用深度遍历,判断每个节点是不是平衡二叉树,这种从上至下的方法会导致底层的节点重复判断多次 方法二:使用后序遍历判断,这种方法为自下而上,每个节点只需要判断一次即可   //方法一:使用深度遍历,判断每个节点是不是平衡二叉树,这种从上至下的方法会导致底层的节点重复判断多次 class Solution01 { public: bool IsBalanced_Solution(TreeNode* pRoot) { if…
剑指 Offer 61. 扑克牌中的顺子 Offer_61 题目描述 java代码 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/2/13 11:46 */ import java.util.Arrays; /** * 题目详情:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13, * 而大.小王为 0 ,可以看成任意数字.A 不…
剑指 Offer 61. 扑克牌中的顺子 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大.小王为 0 ,可以看成任意数字.A 不能视为 14. 示例 1: 输入: [1,2,3,4,5] 输出: True 示例 2: 输入: [0,0,1,2,5] 输出: True 限制: 数组长度为 5 数组的数取值为 [0, 13] . 一.数组排序 做这道题的思路: 首先要把nums进行数组排序,然后nums[4]为最大数…
  本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一棵二叉树的根结点,判断该树是不是平衡二叉树.如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 思路 在(55-1) 二叉树的深度基础上修改:计算树的深度,树的深度=max(左子树深度,右子树深度)+1.在遍历过程中,判断左右子树深度相差是否超过1,如果不平衡,则令树的深度=-1,用来表示树不平衡.最终根据树的深度是否等于-1来确定是否…
该题目来源于牛客网<剑指offer>专题. 给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1. 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / 9 20 / 15 7 返回 true . 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / 2 2 / 3 3 / 4 4 返回 false . Go语言实现: /** * Definitio…
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:…
  本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大.小王可以看成任意数字. 思路 输入为大小等于5的数组(大小王记为0),输出为布尔值.具体步骤如下: 1)进行对5张牌进行排序: 2)找出0的个数: 3)算出相邻数字的空缺总数: 4)如果0的个数大于等于空缺总数,说明连续,反之不连续: 5)…
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 题目地址 https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=13&tqId=11192&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 思路 平衡二叉树:它是一棵空树,或者它的两个子树的高度差的绝对值不超过1,并且左右两棵子树都…
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. class Solution { public: int Get_Height(TreeNode* root) { if(root == NULL){ ; } int LeftHeight = Get_Height(root->left); int RightHeight = Get_Height(root->right); ; } bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot…
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 分析:采用后序遍历的方式判断左右子树的高度差是否大于1 class Solution { public: bool flag; int f(TreeNode* root) { if(root) { //后序遍历,从下网往上,每个结点只遍历一次 int x=f(root->left); int y=f(root->right); ) { flag=false; }else { ; } }else { ; } ; } bool IsBala…
题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 思路分析: 首先要明确平衡二叉树的定义.平衡二叉是左右子树的高度差小于等于1,且左右子树都为平衡二叉树.这里就存在一个递归判断左右子树是否为平衡二叉树的操作.可以根据之前求二叉树的高度问题来求解,首先求得当前树的左右子树高度,若满足高度差小于等于1,再进一步判断左右子树. 进一步优化以上的过程,考虑到每一次求二叉树树高度时,存在重复遍历树结点的问题.所以考虑将每个二叉树的高度存下来. 代码: /* struct TreeNode { i…
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None # 这道题使用中序遍历加上剪枝的方法来做的.class Solution: def isBalanced(self, root: TreeNode) -> bool: if self.dfs(root) == -1:return False else:return True def dfs(self,root): # 如果节…
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 日期 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 解题方法 平衡二叉树的定义是任何节点的左右子树高度差都不超过1的二叉树. 按照定义,很容易得出获得左右子树高度,然后判断.递归写法. Python代码: # -*- coding:utf-8 -*…
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 题目地址 https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84?tpId=13&tqId=11214&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 思路 序列化二叉树:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串.需要注意的是,…
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: char* Serialize(TreeNode* root) { if (root == NULL) { retur…
刷完剑指Offer很久了,前几天想起来去年开通的博客园,正好把刷题笔记整理一下 刷题平台:牛客网 刷题语言:Python **链表(8道)** [剑指Offer 3. 从尾到头打印链表 (链表)](https://www.cnblogs.com/huangqiancun/p/9775456.html) 剑指Offer 14. 链表中倒数第k个结点 (链表): https://www.cnblogs.com/huangqiancun/p/9782576.html 剑指Offer 15. 反转链表…
剑指 Offer 03. 数组中重复的数字 题目描述 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次.请找出数组中任意一个重复的数字. Input: {2, 3, 1, 0, 2, 5} Output: 2 解题思路 要求时间复杂度 O(N),空间复杂度 O(1).因此不能使用排序的方法,也不能使用额外的标记数组. 对于这种数组元素在 [0, n-1] 范围内的问题,可以将值为 i 的元素调整到第…
1.面试题43. 1-n整数中1出现的次数 输入一个整数 n ,求1-n这n个整数的十进制表示中1出现的次数. 例如,输入12,1-12这些整数中包含1 的数字有1.10.11和12,1一共出现了5次. 这个题目的核心思想是考虑:每个位是任意数字时,可以包含多少个这个位为1的数字 分了三种情况 class Solution { public int countDigitOne(int n) { //digit表示位因子,就是10.100.1000... long digit=1; int cou…
LeetCode:"剑指 Offer" 刷题小菜鸡,花了几天时间做了一遍 LeetCode 上给出的 "剑指 Offer" 在此做一下记录 LeetCode主页:贤余超 剑指 Offer 03. 数组中重复的数字 // 方法1: // hash表来做:空间换时间的思想 // 时间复杂度 O(n) // 空间复杂度 O(n) public int findRepeatNumber(int[] nums) { Set<Integer> hashset = n…
1.1.题目1 剑指 Offer 45. 把数组排成最小的数 1.2.解法 这题看的题解,发现自己思路错了. 这里直接拿大佬的题解来讲吧. 一开始这里就把创一个string的数组来存int数组 String.valueOf将int转为string存进数组. 这里应该排序,题解中用到了lambda表达式,判断条件是x+y是否大于y+x 然后添加金stringbuilder然后转成字符串返回. 1.3.代码 class Solution { public String minNumber(int[]…
剑指offer 面试题39:判断平衡二叉树 提交网址:  http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=13&tqId=11192 时间限制:1秒       空间限制:32768K      参与人数:2481 题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 分析: 平衡二叉树定义 递归解法 AC代码: #include<iostream> #include<vector&…
一.题目大意 输入一颗二叉树,判断该二叉树是否为平衡二叉树(AVL树). 二.题解 <剑指offer>上给出了两种解决方式: 1.第一种是从根节点开始,从上往下遍历每个子节点并计算以子节点为根节点的子树的高度,通过判断左右子树的高度差是否大于1来判断是否为AVL树.其中计算子树的高度,利用了TreeDepth函数(具体可见<剑指offer(第二版)>P272).其中TreeDepth的思想如下: (1)计算一颗二叉树的高度,可以将该问题转化成求子树的高度+1.如果根节点只有左子树的…
剑指 Offer 55 - II. 平衡二叉树 Offer_55_2 题目描述 方法一:使用后序遍历+边遍历边判断 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/2/9 20:58 */ /** * 题目描述:输入一棵二叉树的根节点,判断该树是不是平衡二叉树. * 如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. */ import sun.reflect.generics…
题目 剑指 Offer 55 - II. 平衡二叉树 思路1(后序遍历+剪枝) 这题是上一题剑指 Offer 55 - I. 二叉树的深度的进阶,逻辑代码和那个一样,也是后续遍历,获取两个子节点较大的那个深度再加上当前一层返回给父节点,是自底向上的 也为要求是否为平很二叉树,要保证他的左子树和右子树差值不大于1,那么我们就在每次获取左右子树的深度的时候再加一个判断就好啦- 但是我们可以进行剪枝优化,如果不剪枝,就算判定为不是平衡二叉树,那么它还是会递归遍历完.当发现不是平衡二叉树的时候,我们返回…
1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. public class Solution { public boolean Find(int target, int [][] array) { if(array == null||array.length==0) return false; int rowIdx = 0,colIdx = array[0]…
介绍 用JavaScript刷完了剑指offer,故总结下每道题的难度.解决关键点,详细题解代码可以点链接进去细看. 关于JS刷题的技巧可以看我之前的这篇:JS刷题总结. 剑指offer的题目在牛客网上可以看:https://www.nowcoder.com/ta/coding-interviews 所有题目的代码已经上传到了github上:https://github.com/14glwu/FEInterviewBox/tree/master/%E5%89%91%E6%8C%87offer 目…
目录 17.树的子结构(27ms,5836k) 18.二叉树的镜像(38ms) 22.从上往下打印二叉树(50ms,5832k) 24.二叉树中和为某一值的路径(26ms,5728k) 38.二叉树的深度(26ms,5624k) 39.平衡二叉树(30ms,5624k) 58.对称的二叉树(26ms,5704k) 17.树的子结构(27ms,5836k) 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路: 要查找A中是否存在和树B结构一…
[剑指offer](第 2 版)Java 题解 第一章 面试的流程 略... 第二章 面试需要的基础知识 面试题 1. 赋值运算符函数 面试题 2. 实现 Singleton 模式 Solution 2 面试题 3. 数组中重复的数字 题目一:找出数组中重复的数字. 题目二:不修改数组找出重复的数字. 面试题 4. 二维数组中的查找 Solution 4 面试题 5. 替换空格 Solution 5 面试题 6. 从尾到头打印链表 面试题 7. 重建二叉树 面试题 8. 二叉树的下一个节点 面试…
36.两个链表的第一个公共节点 题目描述 输入两个链表,找出它们的第一个公共结点. 1.具有重合节点的两个链表是一个Y字性,用两个堆栈放这两个链表,从尾部开始遍历,直到遍历到最后一个重合节点. 这种算法时间复杂度为O(m+n),但是空间复杂度也是O(m+n),相当于是空间换时间 /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ import jav…
  本文为<剑指Offer>刷题笔记的总结篇,花了两个多月的时间,将牛客网上<剑指Offer>的66道题刷了一遍,以博客的形式整理了一遍,这66道题属于相对基础的算法题目,对于刷题练手是很好的实践,接下来会继续回到LeetCode,争取每天拿出一个小时,刷一到两道题.   本文主要对这66道题做一个总结,整体来看,这66道题,涉及到了常用的数据结构:数组.字符串.链表.树.二叉树.栈.队列,还有在编程中经常用到的数据操作和算法:循环.递归.查找.排序.回溯.动态规划.位运算.以下对…