- 2024-11-21LeetCode235. 二叉搜索树的最近公共祖先
题目描述:给定一个二叉搜索树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个结点p、q,最近公共祖先表示为一个结点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树:
- 2024-11-21代码随想录——二叉树19.最大二叉树
递归最容易想到,采用先序遍历。1.遍历数组,找出当前区间的最大值;2.使用该最大值作为根节点;3.对数组的左半部分和右半部分递归调用构建最大二叉树。这种方式是标准的分治法,每次递归都需要遍历当前区间,找到最大值。因此,时间复杂度是O(n^2),因为每一层递归都会遍历一遍数组,且递
- 2024-11-20数据结构在二叉树中用子问题思路来解决问题
二叉树Oj题获取二叉树的节点数获取二叉树的终端节点个数获取k层节点的个数获取二叉树的高度检测为value的元素是否存在判断两颗树是否相同判断是否是另一棵的子树反转二叉树判断一颗二叉树是否是平衡二叉树时间复杂度O(n*n)复杂度O(N)二叉树的遍历判断是否是对称的二叉
- 2024-11-18[JavaScript]将数组按照parentId和id整理成树状结构
JavaScriptfunctionarrayToTree(items){constrootItems=[];constlookup={};for(constitemofitems){constitemId=item.id;lookup[itemId]=item;constparentId=item.parentId;if(parentId===n
- 2024-11-17102. 二叉树的层序遍历【 力扣(LeetCode) 】
文章目录零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码零、原题链接102.二叉树的层序遍历一、题目描述给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。二、测试用例示例1:输入:root=[3,9,20,null,nul
- 2024-11-16二叉树Golang
二叉树前言完全二叉树最底层节点按顺序从左到右排列。满二叉树一颗二叉树只有0度和2度的节点。二叉搜索树左子树上的所有节点的值均小于根节点的值。右子树上的所有节点的值均大于根节点的值。平衡二叉搜索树左右两个子树的高度差的绝对值不超过1。
- 2024-11-15114. 二叉树展开为链表
题目链接解题思路:对于这类递归问题,采用「宏观」思考模式。对于任意一个节点A,左子树先「展开为链表」,右子树再「展开为链表」,然后A节点,将左子树的结果,和右子树的结果,「串在一起」即可。左子树展开为链表,所以要返回两个节点,一个是链表的头,然后是链表的尾。代码/***
- 2024-11-15617. 合并二叉树
题目链接解题思路分情况讨论即可两个头都是空,直接返回空若root1为空,直接返回root2若roo2为空,直接返回root1若都不空,则二者相加,得到一个新节点A,然后二者的左子树去合并,得到一个新左子树new_left,二者的右子树去合并,得到一个新右子树new_right,然后新节点的左儿子就是new_
- 2024-11-1598. 验证二叉搜索树
题目链接解题思路这种二叉树的题目,绝大部分可以用「二叉树的递归套路」来解决,那么什么是「二叉树的递归套路」?其实就是每个节点会有信息,该节点信息怎么来的?左儿子的信息+右儿子的信息,然后加工成自己的信息。根结点是否是搜索二叉树?需要左儿子和右儿子给什么信息?首先
- 2024-11-15102. 二叉树的层序遍历
题目链接解题思路层序遍历就是用队列,本题需要一层一层收集答案,所以我们可以用一个变量cur,表示该层还剩多少节点需要收集,同时,遇到一个节点,还要将其孩子节点放入队尾。那么我们怎么知道下一层的节点个数,所以还需要一个变量next,记录下一层的节点个数。总结一遍:每次从队头
- 2024-11-13力扣—543.二叉树的直径
543.二叉树的直径给你一棵二叉树的根节点,返回该树的 直径 。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。两节点之间路径的 长度 由它们之间边数表示。示例1:输入:root=[1,2,3,4,5]输出:3解释:3,取
- 2024-11-11101. 对称二叉树
题目链接解题思路检查一个二叉树是否轴对称,其实和根结点无关,而是和其左右子树有关。左子树头等于右子树头,然后递归调用,「左子树的右儿子」要等于「右子树的左儿子」并且「左子树的左儿子」要等于「右子树的左儿子」。代码/***Definitionforabinarytreenode.
- 2024-11-11代码随想录——二叉树-11.完全二叉树的节点个数
思路一、层序遍历,时间复杂度O(n)二、利用完全二叉树性质,时间复杂度O(logn*logn)(小于O(n))完全二叉树性质:若树深度为h,则前h-1层节点都达到最大值。第h层节点都集中在最左侧的位置完全二叉树要么1.是满二叉树2.最后一层没满满二叉树计算节点数太方便了,直接用公式2^h-1。
- 2024-11-10每日一题之二叉树
已知结点元素值为正整数且值不相同的一棵二叉树。该二叉树通过给出其先序遍历序列和中序遍历序列构造而成。输入一个整数x,针对此二叉树编写程序求出x的右子树中所有结点值的和(若x不在树上,输出-1)。 输入说明:第一行输入某二叉树的先序遍历序列第二行输入该二叉树的中序遍历
- 2024-11-10代码随想录算法训练营第19天|235. 二叉搜索树的最近公共祖先 ,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点
235.二叉搜索树的最近公共祖先文章链接:https://programmercarl.com/0235.二叉搜索树的最近公共祖先.html题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/思路:利用二叉搜索树的特性,当第一次遇到在[p,q]区间或[q,p]区间的元素的节点,则
- 2024-11-10根据二叉树创建字符串
题目:606.根据二叉树创建字符串-力扣(LeetCode)给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。空节点使用一对空括号对 "()" 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空
- 2024-11-10代码随想录算法训练营第18天| 530.二叉搜索树的最小绝对差, 501.二叉搜索树中的众数 , 236. 二叉树的最近公共祖先
530.二叉搜索树的最小绝对差文章链接:https://programmercarl.com/0530.二叉搜索树的最小绝对差.html视频链接:https://www.bilibili.com/video/BV1DD4y11779/?vd_source=6cb513d59bf1f73f86d4225e9803d47b题目链接:https://leetcode.cn/problems/minimum-absolute-difference-in
- 2024-11-09104.力扣(leetcode)二叉树的最大深度(JAVA)
一、目标给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。二、代码分析总代码:/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeN
- 2024-11-09力扣(Leetcode)112. 路径总和(JAVA)
一、目标 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。二、代码解读
- 2024-11-09代码随想录算法训练营第十七天| 654.最大二叉树 , 617.合并二叉树 , 700.二叉搜索树中的搜索 , 98.验证二叉搜索树
654.最大二叉树文章链接:https://programmercarl.com/0654.最大二叉树.html题目链接:https://leetcode.cn/problems/maximum-binary-tree/description/classSolution{public:TreeNode*traversal(vector<int>&nums,intleft,intright){if(left>=right)ret
- 2024-11-09C++算法练习-day38——106.从中序和后序遍历序列构造二叉树
题目来源:.-力扣(LeetCode)题目思路分析题目要求根据一棵二叉树的中序遍历(inorder)和后序遍历(postorder)结果重建这棵二叉树。中序遍历的特点是左子树->根节点->右子树,而后序遍历的特点是左子树->右子树->根节点。利用这两个遍历的特点,我们可以递归地重建整棵树。后序
- 2024-11-08Leecode热题100-104.二叉树中的最大路径和
二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。示例
- 2024-11-07LeetCode HOT 100 记录
目录230.二叉搜索树中第K小的元素-力扣(LeetCode)199.二叉树的右视图-力扣(LeetCode)230.二叉搜索树中第K小的元素-力扣(LeetCode)相当于把二叉搜索树从小到大排序,而二叉搜索树有一个特点,就是顺序左子树<根节点<右子树,因此可以考虑使用中序遍历/***Definitionfo
- 2024-11-0611.6随笔
这里是11.6随笔。题目留档:以二叉链表作为二叉树的存储结构,编写程序实现:交换二叉树每个结点的左子树和右子树。以先序遍历构建一棵二叉树,输出中序遍历结果,交换每个节点的左右子树后,输出中序遍历结果。代码:#includeincludestructTreeNode{charval;TreeNode*left;TreeN
- 2024-11-05代码随想录打卡Day14
1.力扣226:翻转二叉树题目描述:给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]解答代码:/***Definitionforabin