- 博客(5)
- 收藏
- 关注
原创 二叉树的层序遍历/翻转和对称
二叉树层序遍历题目,二叉树的层序遍历;N二叉树的层序遍历;在每个树行中找最大值;填充每个节点的下一个右侧节点指针;队列先进先出的特点,符合一层一层遍历的逻辑也就是图论里的广度优先遍历。对称二叉树:关于二叉树是否对称,要比较的是根节点的左子树与右子树是不是相互翻转的,所以在递归遍历中,也是要同时遍历2颗树。把每个节点的左右孩子翻转一下,就可以达到整体翻转的效果。概念:深度,高度,二叉树翻转对称。
2024-04-17 18:55:20 111 1
原创 二叉树理论基础
二叉树的统一迭代法,中序一会用栈遍历,一会又用指针来遍历,无法解决访问节点和处理节点(将元素放进结果集)不一致的情况。因此,我们可以将访问的节点放入栈中,把要处理的节点也放入栈中但是要做标记,就是要处理的节点放入栈之后,紧接着放入一个空指针作为标记。中序遍历左中右(迭代法)和后序遍历(左右中)前序遍历(中左右)的迭代法实现是不一样的。将访问的节点直接加入到栈中,但是要处理的节点则后面放入一个空节点,这样只有空节点弹出的时候,才将下一个节点放进结果集。二叉树的节点里多了一个指针,有2个指针,指向左右孩子。
2024-04-16 13:23:40 208
原创 栈与队列 part03
每滑动一次,弹出元素的时候,需要判断弹出的元素是否是最大的,所以窗口里的元素要保证是排序的,并且最大元素放在队列出队口。每进一个元素前,就判断下当前元素是否大于等于窗口队列末尾的元素que.back,大于等于的话,就que.pop_back();优化点是,没有必要维护队列窗口里的所有元素,只需要维护有可能成为窗口里的最大元素就可以了。不考虑时间和空间复杂度的话,暴力解决方法就是2个for循环,一个划定窗口,另一个比较窗口内的最大值,思路这样,自己手写未必也能直接写出来。2、前k个高频元素。
2024-04-15 17:28:10 110 1
原创 day11栈与对列
栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的,栈的底层实现可以是vector,deque,list,主要就是数组和链表的底层实现。很经典的一个思想,逆向思维,总结下括号不匹配的情况有那几种,总结概括好,然后用栈,每读取一个符号,就把对应的符号放入栈,遍历字符串匹配的过程中,发现没有要匹配的字符,说明没有对应的括号。总结很重要,尤其是在匹配的过程中,遍历到左括号,右括号先入栈,右括号,左括号就先入栈,这样括号是否对应的问题就解决了,就只需要比较当前元素和栈顶相不相等就可以了。
2024-04-13 13:44:16 261
原创 数组,双指针/二分法
思路很正常,顾名思义,每次都以左右区间的中间位置数组来判断target处于数组的那一半,然后更新新数组的边界值,再去做二分法搜索,依次循环。这里的一个问题是更新新数组边界值时,注意区间的开闭问题,是左右都闭还是有一侧是开区间。最后返回的slowIndex就是移除元素后的数组索引,其大小就是新数组大小。1、暴力移除,两个for循环,一个for循环遍历数组,寻找移除元素,另一个for循环更新数组。今天的2个数组类的题目都自己重写了2遍以上,主要是熟悉写代码的感觉,能够更好的理解掌握好每天的题目。
2024-04-12 12:00:20 156
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人