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 评论 -
判断是否为完全二叉树(两种方法)
完全二叉树也就是没有满的满二叉树,它的节点在每一层一定是连续分布的。如果出现哪一层中两个非空节点间隔一个空节点,那一定不是完全二叉树。如下图所示:假设这棵完全二叉树有K层,因此我们可以总结一下完全二叉树的规律:前K-2层:每个节点都有两个孩子,节点饱和前K-1层:节点肯定是饱和的—>到达了最大值第K-1层:不一定所有的节点都有孩子节点,如果有孩子节点,至少要是左孩子节点,有可能出现不饱和节点方法一:从上面的规律中我们可以知道:完全二叉树的前k-1层一定是包和节点,第k-1层就可能原创 2020-11-07 11:59:11 · 41595 阅读 · 18 评论 -
Leetcode-102: 二叉树的层序遍历
二叉树的层序遍历,顾名思义是按照二叉树的每一层进行遍历的,如下图的二叉树,它的层序遍历顺序就是:A B C D E F G H我们发现层序遍历就是按照一层一层的顺序访问的,那么此时就可以联想到队列先进先出的特性,即:对于二叉树从上往下从左往右依次放到队列中,并且遍历一遍即可。步骤:空树:直接返回二叉树不为空:将根节点入队列,并循环执行以下操作(循环条件:队列不为空):取队头元素,遍历该元素并且从队列中删除:cur=queue.poll();如果cur有左孩子:入队列如果cur有右孩子:入原创 2020-11-07 09:10:20 · 245 阅读 · 2 评论 -
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 评论 -
Leetcode94-二叉树中序非递归遍历
说到非递归遍历,很多人可以想到借助栈或者队列,没错,我们层序遍历就是借助队列来实现的。那麽我们今天的中序非递归又是怎末做到的呢?首先,我们先看看中序遍历的规律,分析思路才能更方便写代码如上图所示的二叉树,我们都知道中序遍历是:左子树----根节点----右子树。遍历结果为:3 2 1 5 4 6从结果以及中序遍历的特点可以看出,从根节点一直向左下,直到拿到根节点左子树的最左节...原创 2020-03-15 15:15:05 · 161 阅读 · 0 评论 -
Leetcode—110: 平衡二叉树(两种解法)
题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。分析:平衡二叉树的定义就是要求每个节点的左右两棵子树的高度差的绝对值不超过1,所以问题的关键就是需要求出每个节点的高度差,然后判断。思路一:考虑的关键:!!!一开始我思考能不能直接通过一个递归函数就把每一个节点的高度差计算出来,但是通过实践以及思考,发现:计算高度差必须先求出左右子树的高度,然后做差!如果直接将递归函数返回高度差,上一层的原创 2020-10-31 15:19:52 · 639 阅读 · 0 评论