leetcode-递归/回溯
爱得恋
这个作者很懒,什么都没留下…
展开
-
Leetcode-106:从中序与后序遍历序列构造二叉树
题目描述:根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:分析:看到这道题是不是想到了根据前序遍历和中序遍历构造二叉树,没错前序遍历是先遍历根节点,再遍历左右子树;而后序遍历是先遍历左右子树再遍历根节点。那么我们就可以根据之前那道题的做法,将后序遍历的结果从后向前依次构建每个根节点(因为后序是最后访问根节点的),然原创 2020-11-19 15:18:07 · 112 阅读 · 0 评论 -
Leetcode-105:从前序与中序遍历序列构造二叉树
题目描述:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]分析:我们知道,中序遍历是左子树----根节点----右子树:所以根节点的左侧元素就是该节点的左子树,右侧就是该节点的右子树。比如上面的二叉树,中序遍历结果是 [9,3,15,20,7],根节点是3,然后3的左侧为【9】,那么9就是3的左子树,3的右侧[15,20,7]就是它的右原创 2020-11-18 17:50:41 · 159 阅读 · 0 评论 -
二叉搜索树转化为双向链表
题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向原创 2020-11-15 20:03:44 · 969 阅读 · 0 评论 -
创建二叉树
题目描述:编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入描述:输入包括1行字符串,长度不超过100。输出描述:可能有多组测试数据,对于每组数据,输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。每个输出结果占一行。这道题的意思就是给定一个二叉树前序遍历的序列,然后让原创 2020-11-14 14:45:30 · 1122 阅读 · 0 评论 -
Leetcode-236:二叉树的最近公共祖先(两种方法)
题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]代码:class Solution { public TreeNode lowestCommonAncestor(TreeNode roo原创 2020-11-14 14:40:53 · 97 阅读 · 0 评论 -
Leetcode101: 对称二叉树(递归、双端队列)
题目描述:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:分析:看到这道题,是不是会首先联想到二叉树的镜像.,没错,我们通过题目给出的样例来看,如下图所示:发现如果对称的话是关于以根节点为对称轴左右对称的,即:左子树的左孩子和右子树的右孩子相等。那么如果把右子树变为右子树的镜像,是不是只需要判断根节点的左右子树是否相等即可。于是那么我们是不是可以总结出:如果一棵二叉原创 2020-11-06 11:26:57 · 218 阅读 · 2 评论 -
剑指 Offer 27:二叉树的镜像(两种解法)
题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入:分析:什么是一棵二叉树的镜像呢?二叉树的镜像就是交换二叉树中每个节点的做左右子树。原创 2020-11-06 09:00:10 · 212 阅读 · 1 评论 -
Leetcode-572: 另一个树的子树( leetcode100:相同的树 )
题目描述:给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s:思路:一棵树是否为另一棵树的子树,那么只需要判断第一棵树中的每个节点为根节点的子树是为和另一棵树相等。那麽此时就需要来实现判断两棵树是否是同一棵树的方法,即:leetcode-100. 相同的树....原创 2020-11-04 15:33:39 · 285 阅读 · 5 评论 -
Leetcode—110: 平衡二叉树(两种解法)
题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。分析:平衡二叉树的定义就是要求每个节点的左右两棵子树的高度差的绝对值不超过1,所以问题的关键就是需要求出每个节点的高度差,然后判断。思路一:考虑的关键:!!!一开始我思考能不能直接通过一个递归函数就把每一个节点的高度差计算出来,但是通过实践以及思考,发现:计算高度差必须先求出左右子树的高度,然后做差!如果直接将递归函数返回高度差,上一层的原创 2020-10-31 15:19:52 · 639 阅读 · 0 评论 -
Leetcode 21-合并两个有序链表
这个题常规思路确实很简单,但是在考虑递归写法的时候,我又一次被打击了,真的就是一看就会,一写就废的那种!!!题目描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。思路一:最常规的思路:遍历两个链表,比对每一个节点,每次将节点值较小的串起来,思路很简单,代码人很容易。代码:class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(原创 2020-10-25 19:58:40 · 100 阅读 · 0 评论 -
Leetcode-剑指 Offer 16: 数值的整数次方
题目描述:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。分析:这个题第一眼看着好像并不难,但是把它能顺利写下来还是有几处细节要注意的,下面我们就来好好分析以下。看到这题第一眼我就想着用递归,因为最近想把递归的题好好练练,但是用非递归的方法更简单,我们先来说递归,因为递归会有很多细节。解法一:递归这个题的递归方法我一共提交了好几次,还是自己菜啊!第一次思路:第一次我就想法比较简原创 2020-10-16 16:06:15 · 112 阅读 · 0 评论 -
Leetcode-78: 子集
题目描述:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。分析:这个题的题意很明确就是求一组数的所有子集;我们利用数学知识很容易能求出它的子集一共多少种。求所有子集的数量:我们高中已经有了排列组合的知识了,所以求所有子集的数量的思想就是从所有的数字中选取任意不重复的组合,我们再思考一下,其实每个数字就两种可能:要么选要,要么不选。---------> 因此,所有子集的数量就等于每个数组的选取可能(2种)*总的数字个数,即:n^2原创 2020-10-09 18:08:55 · 134 阅读 · 0 评论