![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
Chrsitina_S
这个作者很懒,什么都没留下…
展开
-
二叉树理论基础
二叉树的种类不考虑数值的二叉树1 满二叉树如果一棵二叉树又有度为0和2的节点,且度为0的节点都在同一层上,这棵树就称为满二叉树。深度为k,节点数为2^k-1其实就是最后一层的孩子一个也不少,父节点都是两孩子2 完全二叉树除了最底层节点没有填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置从满二叉树可以剪到完全二叉树考虑数值的二叉树二叉搜索树...原创 2021-08-18 19:20:30 · 84 阅读 · 0 评论 -
剑指offer68 二叉树的最近公共祖先
二叉树的公共祖先有四种情况:1.左右子树都没有寻找的节点,此时返回None2.两个值分布在左右子树的两侧,此时返回root3.q为祖先,前提是除q下的子树,无法找到p值4.p为祖先,前提是除p下的子树,无法找到q值def helper(root,p,q): if not root:return None if root==p or root==q: return root left=helper(root.left,p,q).原创 2021-07-05 22:14:31 · 82 阅读 · 0 评论 -
剑指65.位运算代替加减法
Python 支持的位运算符有如下 6 个:&:按位与。两个1才是1|:按位或。只要有1就是1^:按位异或。0和1都在才是1~:按位取反。<<:左位移运算符。:右位移运算符。所有的数值在计算机底层是以二进制形式存在的,原码是直接将一个数值换算成二进制数。由于符号位的存在,计算机底层以补码的形式保存所有的整数。补码的计算规则:正数:补码=原码;负数:补码=反码(原码按位取反)+1。只是最高位(符号位)保持不变。python没有int,long等不同长度的变量,即在编程时无.原创 2021-06-30 15:17:08 · 282 阅读 · 0 评论 -
两个链表的第一个公共节点
Class ListNode(object): def __init__(self,x): self.val=x self.next=None#前面的节点不相同,走到相同的位置 p1=headA p2=headB lA,lB=[],[] while p1: lA.append(p1.val) p1=p1.next while .原创 2021-06-28 20:13:39 · 80 阅读 · 0 评论 -
剑指:排序数组的查找问题
一维有序数组查找有序数组的查找问题首选——二分法1.初始化,将双指针指向数组的两端,取i=0,j=len(list),m=(i+j)/22.循环二分若list[m]>list[j],则目标值位于m的右侧区域,此时最小值应在[m+1,j]若list[m]<list[j],则目标值位于m的左侧区域,此时最小值应在[i,m]若list[m]==list[j],此时无法判断最小值所在的区域,因此将搜索范围缩小,j=j-13.返回值条件,i=j,并返回该点的值Class Soltuion原创 2021-06-23 23:25:36 · 89 阅读 · 0 评论 -
剑指 27.二叉树的镜像
镜面二叉树明确一棵二叉树是不是对称的:这棵树的左右子树必须同时是对称的根据镜面二叉树的定义,其实思路就出来了,我们只需要将每个小子树的左右两个节点结构进行对换,最后一步就是左右两课大子树进行交换,整个镜像二叉树就出来了。一定要理解清楚什么是镜面二叉树,做这道题就相对简单了Class TreeNode(object): def __init__(self,value): self.val=value self.left=None .原创 2021-06-22 20:23:38 · 107 阅读 · 0 评论 -
剑指:二叉搜索树的最近公共祖先——范围搜索
首先剖析题目:1.二叉树的类型:搜索二叉树,特点(左孩子<父节点<右孩子)2. p,q,x均为树结构,而不是简单的数值,注意返回的也是一个树结构这个题目由于二叉树的类型而变得简单根据搜索二叉树的特点进行搜索(范围搜索,不要沉迷于具体的数值):如果 当前节点同时大于p或q,说明p或q应该位于当前节点的左孩子里如果 当前节点同时小于p或q,说明p或q应该位于当前节点的右孩子里如果 上述两个条件均不满足,则有两种可能,a) p和q开始分叉,进入不同的子树(此时不需要再进行搜索了);.原创 2021-06-22 17:30:26 · 89 阅读 · 0 评论 -
验证二叉树:双端队列
要读懂题目:这里说的是节点上的数字i是寻找孩子列表中第i个位置的数字,并根据该数字寻找下一个孩子的位置。python中也有对应的数据结构代码:双端队列import collectionsd = collections.deque([])d.append('a') # 在最右边添加一个元素,此时 d=deque('a')d.appendleft('b') # 在最左边添加一个元素,此时 d=deque(['b', 'a'])d.extend(['c','d']) # 在最右边添加所有元素,此..原创 2021-06-07 22:17:09 · 184 阅读 · 1 评论 -
键指offer:合并两个有序链表
整体的思路是,先创建一个新的链表,然后判断两个链表节点的value,并向下移动一个位置,直到有一个链表为空,直接将指针指向另一个不为空的链表即可。详细步骤:由于最后要求返回一个链表,在开始之前要定义一个空链表,并用两个指针进行指向(一个用于最后的输出,因为输出是从头结点开始向后输出;另一个用于过程链接)对于两个链表,均已经指向头结点。两个节点都不为空时,将新链表的next指向最小的节点,并将节点后移动,最重要的一点,一定要把head移动到next位置才能指向下一个,也就是head=head.nex.原创 2021-05-22 13:43:13 · 83 阅读 · 0 评论