草庐IT

二叉树

全部标签

代码随想录算法训练营第22天 | 二叉树part08:● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

235 二叉搜索树的最近公共祖先用236普通二叉树(没顺序的)代码也可以过,但是本题还是要利用特性:搜索二叉树有序关键:如果一个节点的值在p和q之间(即p我觉得甚至不用随想录说的“第一次遇到cur节点是数值在[p,q]区间中,即节点5,此时可以说明p和q一定分别存在于节点5的左子树,和右子树中”第一次,就是只要满足就是了。不过他的意思应该是找到就行。如果数值在pq之间就一定是最近的了,因为再远的话,就pq都在一个子树里面了。我写的↓,我处理null确实和他gpt写的不一样 TreeNode*traverse(TreeNode*node,intlarge,intsmall){if(node->v

使用 Go 语言实现二叉搜索树

二叉树是一种常见并且非常重要的数据结构,在很多项目中都能看到二叉树的身影。它有很多变种,比如红黑树,常被用作 std::map 和 std::set 的底层实现;B树和B+树,广泛应用于数据库系统中。本文要介绍的二叉搜索树用的也很多,比如在开源项目go-zero中,就被用来做路由管理。这篇文章也算是一篇前导文章,介绍一些必备知识,下一篇再来介绍具体在go-zero中的应用。二叉搜索树的特点最重要的就是它的有序性,在二叉搜索树中,每个节点的值都大于其左子树中的所有节点的值,并且小于其右子树中的所有节点的值。图片这意味着通过二叉搜索树可以快速实现对数据的查找和插入。Go语言实现本文主要实现了以下几

【数据结构】二叉树详解(1)

⭐️前言✨二叉树的概念性质⭐️二叉树链式结构的实现结构定义:#include#include#includetypedefintBinaryTreeDataType;typedefstructBinaryTreeNode{ BinaryTreeDataTypevalue; structBinaryTreeNode*left; structBinaryTreeNode*right;}BinaryTreeNode;⭕️二叉树的遍历按照规则,二叉树的遍历分为:前序/中序/后序的递归遍历。前序遍历(PreOrderTraversal):访问根节点的操作发生在遍历其左右子树之前。根->左子树->右子树中

【训练营day41|动态规划|343. 整数拆分、96.不同的二叉搜索树】

训练营day41|动态规划|343.整数拆分、96.不同的二叉搜索树343.整数拆分要点代码96.不同的二叉搜索树要点代码343.整数拆分要点标准的递归状态,dp[i]=max(dp[i],(i-j)*j,dp[i-j]*j);最初的思路是dp[i]=max(dp[i],dp[i-j]*dp[j]);这个思路的问题就在于初始化的dp不符合动态规划的定义,代码是可以ad的也可以用贪心算法,当n大于4后每次拆分为n个3和剩余的数,就是对的,直观上非常合理。只是没有研究数学证明代码classSolution:defintegerBreak(self,n:int)->int:dp=[0]*(n+1)d

秋招算法备战第16天 | 104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

104.二叉树的最大深度-力扣(Leetcode)一开始使用global,但是报错如下NameError:name‘max_depth’isnotdefinedifdepth>max_depth:Line15intraversal(Solution.py)traversal(root,1)Line22inmaxDepth(Solution.py)ret=Solution().maxDepth(param_1)Line44in_driver(Solution.py)_driver()Line55in(Solution.py)报错版本的代码如下#Definitionforabinarytreeno

代码随想录算法训练营第十天 | 二叉树系列1

二叉树系列1二叉树理论基础注意点小记二叉树的种类二叉树的存储方式二叉树的遍历要熟悉自己所用编程语言常用的数据容器的底层实现一定要会自己实现所用数据结构的定义二叉树的递归遍历递归三部曲前中后序递归遍历前序遍历--我的代码前序遍历--代码随想录的代码中序遍历--我的代码后序遍历--我的代码二叉树的非递归遍历--迭代法注意点记录代码随想录强调一刷逻辑还没有理清,对迭代法的思路没有掌握代码随想录的代码我的代码(当天晚上自己写)二叉树的非递归遍历--迭代法统一编写方式重点代码随想录的代码我的代码(当日晚上自己写)二叉树的层序遍历重点代码随想录的代码我的代码(当日晚上自己写)快速过完所有二叉树题目后记录用

树和二叉树 --- 数据结构

目录1.树的概念及结构1.1树的概念1.2树的表示1.3树在实际生活中的运用2.二叉树的概念及结构 2.1概念2.2特殊的二叉树2.3二叉树的性质2.4二叉树的存储结构1.树的概念及结构1.1树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根节点没有前驱结点除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、.......Tm,其中每一个集合Ti(1子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继因此,树是递归定义的。树型结

秋招算法备战第15天 | 层序遍历、226.翻转二叉树、101.对称二叉树

102.二叉树的层序遍历-力扣(Leetcode)用的前序遍历,通过字典保存每一层的结果#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:deflevelOrder(self,root:Optional[TreeNode])->List[List[int]]:self.result_dict={}deftraversal(cur,depth):if

秋招算法备战第14天 | 二叉树理论基础、递归遍历、迭代遍历、统一迭代

二叉树理论基础篇本文介绍了二叉树的基础知识,包括满二叉树、完全二叉树、二叉搜索树、平衡二叉搜索树以及二叉树的存储方式和遍历方式。🌳二叉树的种类包括满二叉树和完全二叉树。🌿满二叉树是只有度为0和度为2的节点,并且度为0的节点在同一层上的二叉树。🌲完全二叉树的每层节点数都达到最大值,除了最底层可能没有填满。🔎二叉搜索树是有序树,左子树的节点值都小于根节点的值,右子树的节点值都大于根节点的值。⚖️平衡二叉搜索树的左右子树高度差不超过1,且左右子树都是平衡二叉树。💾二叉树可以用链式存储(指针)或顺序存储(数组)方式表示。🌐二叉树的遍历方式包括前序、中序、后序和层序遍历。递归遍历递归三要素确定递归函数的

代码随想录算法训练营第21天 | 二叉树part07:● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先

530 二叉搜索树的最小绝对差,关键:二叉搜索树和顺序有关的,全都用中序本题中序套模板,思路秒出。但是传var这里让我学到了。一开始写的是traverse(TreeNode*node,TreeNode*prev,int&min),发现就是prev没传对。后来prev改成globalvar就对了。TreeNode*prev;voidtraverse(TreeNode*node,int&min){if(node==nullptr)return;if(node->left)traverse(node->left,min);if(prev!=nullptr){min=std::min(min,std: