摘要: 传送门(题目要求每个数字不重复) 题目分析:递归 对于任意一颗树而言,前序遍历的形式总是:[ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ] 即根节点总是前序遍历中的第一个节点。而中序遍历的形式总是:[ [左子树的中序遍历结果], 根节点, [右子树的中序遍历结果] ] 如果我们 阅读全文
posted @ 2020-08-02 19:55 Peterxiazhen 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目分析: 方法一:递归 求解根节点的最大深度,可以转化为根节点的深度$1$,加上左子树和右子树的最大深度中较大的那一个。通过分析,这明显是一个递归问题,用递归求解代码也比较简单。 /** * Definition for a binary tree node. * struct TreeN 阅读全文
posted @ 2020-08-02 19:42 Peterxiazhen 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目分析:二叉树的层序遍历就是把二叉树分层,然后每一层从左到右遍历节点。这和宽度优先搜索$bfs$是一致的,但是二者的输出结果不同:层序遍历必须区分每一层,返回的是一个二维数组;而$bfs$返回的是一维数组。如下图所示: 那么如何修改$bfs$呢?我们可以在每一层遍历的开始前,记录队列中的节 阅读全文
posted @ 2020-08-02 19:35 Peterxiazhen 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 题目:传送门 用深度优先搜索就行了,注意只能上下左右四个方向,注意不能越出界限,走过的地方不能重复走。代码的条件有点多,注意细节。 #include <string> #include <cstring> #include <vector> #include <algorithm> using na 阅读全文
posted @ 2020-07-26 16:48 Peterxiazhen 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 题目:传送门 题目分析:二叉搜素树有一个很重要的性质: 若左子树不空,则左子树上的所有结点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根节点的值。 那么,很容易得到,对二叉搜索树进行中序遍历,得到的序列应该是升序的。 这样的话,我们在中序遍历的时候检查当前节点的值是 阅读全文
posted @ 2020-07-26 16:12 Peterxiazhen 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 题目:传送门 题目分析:二叉搜索树:若左子树不空,则左子树上的所有结点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根节点的值。那么,我们给定一个有序的序列$1\cdots n$。为了构造出一棵二叉搜索树,我们可以遍历每个数字$i$,将其作为根节点,并将$1\cdot 阅读全文
posted @ 2020-07-26 15:45 Peterxiazhen 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 题目:传送门 方法一、递归 中序遍历:先遍历左子树,在遍历根节点,最后遍历右子树。比较经典的方法是递归。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeN 阅读全文
posted @ 2020-07-26 08:41 Peterxiazhen 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 题目:传送门 分析:这个题和62很像,只是最后求得是最短的那条路径,还是用动态规划的思想。 $dp\left [ i \right ]\left [ j \right ]= min\left \{ dp\left [ i-1 \right ]\left [ j \right ],dp\left [ 阅读全文
posted @ 2020-07-19 15:56 Peterxiazhen 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 传送门 方法一:题目分析:起点为$\left ( 0,0 \right )$,重点为$\left (m - 1,n-1 \right )$。因为机器人智能向下或者向右移动一个单元。一共需要移动$m + n - 2$步,其中向下移动$m - 1$步,向右移动$n - 1$步,向下/向右的顺序可以任意组 阅读全文
posted @ 2020-07-19 15:25 Peterxiazhen 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 题目 排序,我们会发现能合并区间的在排序后一定是连续的。如下图: 排序后,前后两个区间有以下三种情况: 那么我们就判断橙线的左端点和蓝线的右端点之间的关系,来判断是否合并。若能合并,合并区间的右端点是两条线的最大右端点。 #include <algorithm> #include <vector> 阅读全文
posted @ 2020-07-18 10:32 Peterxiazhen 阅读(201) 评论(0) 推荐(0) 编辑