算法学习
天真吖415
这个作者很懒,什么都没留下…
展开
-
算法学习(七)判断一个二叉树是否为完全二叉树
定义一个全局的深度参数,对该二叉树进行前序遍历,当第一次出现null值时,记录当前的深度,之后再遍历到该深度的节点时,如果不是null值,说明不是完全二叉树,如果出现null值的深度不是记录的值,说明不是完全二叉树,如果超过记录值的深度,说明不是完全二叉树(略)完全二叉树的定义:若二叉树的深度为 h,除第 h 层外,其它各层的结点数都达到最大个数,第 h 层所有的叶子结点都连续集中在最左边,这就是完全二叉树。数据范围:节点数满足 1 \le n \le 100 \1≤n≤100。原创 2023-10-24 15:02:21 · 904 阅读 · 0 评论 -
算法学习(六)判断二叉树是否为二叉搜索树
定义一个全局节点保存当前节点的根节点信息,递归该二叉树,判断当前节点的左节点与右节点是否满足搜索树条件,注意:防止左子树的当前节点的右节点超过根节点,需要额外的进行判断,右子树也同理。二叉搜索树满足每个节点的左子树上的所有节点均小于当前节点且右子树上的所有节点均大于当前节点。中序遍历二叉树,观察结果是否有序来判断是否为二叉搜索树(略)给定一个二叉树根节点,请你判断这棵树是不是二叉搜索树。原创 2023-10-24 14:45:38 · 249 阅读 · 0 评论 -
算法学习(五)将两颗二叉树进行合并
以tree1为基础,将tree2上的值或节点加到tree1上,完成合并,递归过程中,当tree1的当前节点为null时,将tree2的节点接在tree1上,当tree2的当前节点为null时,直接返回,都不为空,则将tree1的值加上tree2的值,完成二叉树的合并。已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替。进阶:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n)原创 2023-10-24 14:23:52 · 342 阅读 · 0 评论 -
算法学习(四)将一颗二叉搜索树转排序的双向链表
数据范围:输入二叉树的节点数 0 \le n \le 10000≤n≤1000,二叉树中每个节点的值 0\le val \le 10000≤val≤1000。二叉搜索树的中序遍历正好为排序的结果,通过中序遍历,递归过程中,通过pre节点保存上一节点数据,完成转换。要求:空间复杂度O(1)O(1)(即在原树上操作),时间复杂度 O(n)O(n)输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。原创 2023-10-24 14:04:50 · 142 阅读 · 0 评论 -
算法学习(三)利用前序遍历的思想求解层序遍历
在前序遍历的基础上,增加一个深度参数,结果用集合保存,保存位置为相应的深度索引。给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)给定的二叉树是{3,9,20,#,#,15,7},原创 2023-10-24 11:55:23 · 59 阅读 · 0 评论 -
算法学习(二)递归求解字符括号匹配问题
在递归字符串的过程中,采用stack保存当前字符,每一次递归将字符与集合最后一个元素进行匹配,如果匹配成功,则清除最后一个元素或添加当前元素,进入下一次递归,最后保证集合为空,说明字符串合法。给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列。括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)原创 2023-10-24 11:40:30 · 116 阅读 · 0 评论 -
算法学习(一)归并排序求解N个数中最大的K个数
给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4(任意顺序皆可)。数据范围:0\le k,n \le 100000≤k,n≤10000,数组中每个数的大小0 \le val \le 10000≤val≤1000。要求:空间复杂度 O(n)O(n) ,时间复杂度 O(nlogk)O(nlogk)采用归并排序的思想,将数组分解成若干数组,再排序,取出前K个数。原创 2023-10-24 11:29:39 · 96 阅读 · 0 评论