左程云算法Day6 图
搜索二叉树(BST):左孩子都比该节点小,右孩子都比该节点大
判断是否为搜索二叉树:改写中序遍历 (中序遍历下必然是递增的),只需要把中序遍历的打印过程改为与当前已检查到的最大值做比较即可判断
public class IsBst {public static int preValue=Integer.MIN_VALUE;public static boolean isbst(Node head){if(head==null){return true;}boolean isLeftBST = isbst(head.left);if(!isLeftBST){return false;}if(head.value<=preValue){return false;}else{preValue= head.value;}return(isbst(head.right));}
}
判断一颗二叉树为完全二叉树:二叉树按宽度遍历,若遇到一个节点只有右孩子没有左孩子,则可判断其为非完全二叉树;若遇到了第一个左右孩子不双全后,后面遇到的节点全都必须为叶子节点。
import java.util.LinkedList;/*** @author 咕噜大飞侠* @version 1.0* Create by 22/2/2022 上午9:59* 宽度遍历判断完全二叉树* 主要思想:完全二叉树中必然存在两种情况:1、任意节点满足有左孩子没有右孩子,* 2、第一中情况下,若出现了有左无右的情况,后面所有的节点都必须为叶子节点(没有左节点也没有右节点)*/public class isCBT {public static boolean isCBT(Node head){if(head==null){return true;}//利用队列来遍历二叉树LinkedList<Node> queue = new LinkedList<Node>();boolean flag =false;Node l = null;Node r = null;queue.add(head);while(!queue.isEmpty()){head = queue.poll();l=head.left;r=head.right;if(flag&&(l!=null||r!=null)||(l==null&&r!=null)){return false;}if(l!=null){queue.add(l);}if(r!=null){queue.add(r);if(l == null||r==null){flag = true;}}}
判断一棵树是否为平衡二叉树:利用递归套路。
递归套路:对于设置变量存储自己想要的信息,然后通过这些信息组合判断得出结论。该套路可以解决大部分树型DP的问题(从左树要信息和从右树要信息形成递归)
判断一棵树是否为满二叉树:节点总数为2^depth-1.
public class isF {public static boolean isf(Node head){if(head==null){return true;}Info all = f(head);if(all.nodes==1>>all.height-1){return true;}else{return false;}}public static class Info{public int height;public int nodes;public Info(int height,int nodes){this.height=height;this.nodes =nodes;}}public static Info f(Node x) {if (x == null) {return new Info(0, 0);}Info leftData=f(x.left);Info rightData=f(x.right);int height = Math.max(leftData.height,rightData.height)+1;int nodes =leftData.nodes+rightData.nodes+1;return new Info(height,nodes);}
}
题目:给定两个二叉树的节点node1和node2,求出他们的最低公共祖先节点
分为三种情况:1、A是B的LCA或B是A的LCA;2、A和B互不为LCA,向上遍历才能够找到公共祖先。
题目:在二叉树中找到一个节点的后续节点
求后继:两种情况:1、x有有右树的时候,x的后继为右数的最左节点
2、x没有右子树时 ,一直往上,直到当前节点是其父亲节点右孩子
二叉树的序列化和反序列化:将内存里一棵树变化为字符串形式,以及将字符串形式变为内存里的树
题目:判断一棵二叉树是另一棵二叉树的子树
题目2:纸折痕题目:把一张纸条竖放在桌面上,然后从纸条的下边向上对折,折出折痕展开。若为凸输出凸,为凹输出凹,根据所给折数由上至下输出所有折痕。(coding题,实为中序遍历)
左程云算法Day6 图相关推荐
- 左程云算法笔记(四)哈希表和有序表的使用、链表
左程云算法笔记(四) 哈希表的使用 有序表的使用 链表 单链表反转 (LC206) 双向链表反转 打印两个有序链表的公共部分 合并两个有序链表(LC21) 判断一个链表是否为回文结构 (LC234) ...
- LeetCode左程云算法课笔记
左程云算法课笔记 剑指Offer 位运算 ^运算符理解 寻找出现双中的单数 取出一个数最右边1的位置 找所有双出现中的两个单数 整数二进制奇数位偶数位交换 数组中全部出现k次返回出现一次的数 链表 判 ...
- 左程云算法笔记总结-基础篇
基础01(复杂度.基本排序) 认识复杂度和简单排序算法 时间复杂度 big O 即 O(f(n)) 常数操作的数量写出来,不要低阶项,只要最高项,并且不要最高项的系数 一个操作如果和样本的数据量没有关 ...
- CSDN专访左程云,算法之道
算法的庞大让很多人畏惧,程序员如何正确的学习并应用于面试.工作中呢?今天,CSDN邀请了IBM软件工程师.百度软件工程师.刷题5年的算法热爱者左程云,来担任CSDN社区问答栏目的第二十六期嘉宾,届时会 ...
- 左程云算法笔记总结-基础提升篇
提升01(哈希) 认识哈希函数 哈希函数的输入一般需要是无穷尽的,没有限制:输出可以有一定的范围,比如MD5加密后产生的字符串可以有2的32次方-1种,用十六进制表示需要16个字符. 相同的输入对应相 ...
- B站左程云算法视频基础提升02
岛问题 一个矩阵中只有0和1两种值,每个位置都可以和自己的上下左右相连,如果一片1连在一起,这个部分叫做一个岛,求一个矩阵有多少个岛 思路:遍历,infect class Solution {publ ...
- 左程云算法 - 公开课笔记
第五节 题目:原地交换,不允许额外的空间 方法1:复杂度O(N/2) 1.左侧逆序 2.右侧逆序 3.整体逆序 方法2:循环右移 复杂度O(N^2) 方法3: 直到左右等长的时候,就不再交换了 第六节 ...
- B站左程云算法视频笔记(01
1.位运算 异或 ^ ,可理解为不进为相加,满足结合律和交换律 a^a=0: a^0=a: 交换a和b a=a^b: b=a^b: a=a^b: 但必须满足是位置不同的(同一内存位置自己异或结果为0) ...
- 左程云算法 day8 前缀树和贪心算法
前缀树 :建立好前缀树后可以把下面的题目快速地解决,便于实现前缀查找 题目:一个字符串类型的数组arr1,另一个字符串类型的数组arr2.arr2中有哪些字符,是arr1中出现的,请打印.arr2中有 ...
- B站左程云算法视频高级班01
题目1:给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要不能用非基于比较的排序 [ ]假设是长度为9的数组 首先遍历数组 找出min 和 ma ...
最新文章
- DIV CSS完美兼容IE6/IE7/FF的通用方法
- python 六边形架构_通过纯css3代码实现六边形边框
- 一个权限树的设计与实现
- 【数据结构与算法】之深入解析“预测赢家”的求解思路与算法示例
- 找出一个数组中唯一一个出现2次的数字
- 计算机三级信息管理技术考试大纲
- 一天完成一点,进度太慢了啊
- python计算两个时间间隔准确的天、月、年之差
- (100)FPGA RAM实现(V实现)
- Hadoop hive sqoop zookeeper hbase生产环境日志统计应用案例(hadoop篇)
- oracle数据库操作文档,oracle数据库操作
- Java 枚举类使用实践
- php投影,投影效果怎么做?PS制作逼真的投影效果
- win10计算机桌面快捷方式,win10发送到桌面快捷方式不见了如何解决_win10电脑没有发送到桌面快捷方式选项怎么恢复...
- 风力发电机组的基本结构
- 使用Audacity软件分析浊音、清音、爆破音的时域及频域特性。
- 注意力机制-多头注意力
- GO 中 Chan 实现原理分享
- 通过ip无法获得计算机名称,电脑获取不到IP地址如何解决
- 蒙特梭利素材-【数字海报】蒙氏素材