剑指offer数据结构刷题
代码解析+源代码+思路
锦鲤金叔叔
这个作者很懒,什么都没留下…
展开
-
重建二叉树C++
重建二叉树C++题目:题解:代码:题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。题解:代码:/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeN转载 2021-02-20 21:22:28 · 609 阅读 · 0 评论 -
校招动态规划算法总结含C代码
校招动态规划算法总结含C代码一、路径总数问题二、数组最大累加问题三、换钱的最少货币数文章目录一、路径总数问题二、数组最大累加问题三、换钱的最少货币数一、路径总数问题例题:一个机器人在m×n大小的地图的左上角(起点)。机器人每次向下或向右移动。机器人要到达地图的右下角(终点)。可以有多少种不同的路径从起点走到终点? int uniquePaths(int m, int n) { m-=1; n-=1; long res=1;原创 2020-12-17 22:16:48 · 201 阅读 · 0 评论 -
面试题之时间复杂度(学会用对儿)
题目描述:为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。输入:每个输入包含一个测试用例。每个测试用例的第一行包含两个正整数,分别表示工作的数量N(N<=1...原创 2020-04-06 20:33:35 · 451 阅读 · 0 评论 -
二叉搜索树第k小(二叉树的中序遍历)
题干:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。方法:二叉树的中序遍历,递归和非递归方式。源代码1(递归方法):class Solution {public: TreeNode* KthNode(TreeNode* pRoot, int k) { mid(pRoot...原创 2020-04-05 21:05:43 · 349 阅读 · 0 评论 -
把二叉树打印成多行
题干:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路:数组res用于保存传出的值,队列q用于按层次顺序保存每一个节点,队列l用于保存对应的结点所属层数的值,从根节点开始依次将节点压入队列,每一次从队列头取出结点同时再将其左右孩子结点压入队列尾。源代码:/*struct TreeNode { int val; struct TreeNode *lef...原创 2020-04-05 19:11:41 · 103 阅读 · 0 评论 -
对称二叉树
题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(...原创 2020-04-05 18:16:47 · 102 阅读 · 0 评论 -
二叉树的下一个节点问题
题干:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:结合图,我们可发现分成两大类:1、有右子树的,那么下个结点就是右子树最左边的点;(eg:D,B,E,A,C,G) 2、没有右子树的,也可以分成两类,a)是父节点左孩子(eg:N,I,L) ,那么父节点就是下一个节点 ; b)是父节点的右孩子(eg:...原创 2020-04-05 14:29:45 · 167 阅读 · 1 评论 -
链表是否存在环(快慢指针问题)
题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路:设置快慢指针,都从链表头出发,快指针每次走两步,慢指针一次走一步,假如有环,一定相遇于环中某点(结论1)。接着让两个指针分别从相遇点和链表头出发,两者都改为每次走一步,最终相遇于环入口(结论2)。以下是两个结论证明:两个结论:1、设置快慢指针,假如有环,他们最后一定相遇。2、两个指针分别从链表头和相...原创 2020-04-05 12:50:50 · 305 阅读 · 0 评论 -
最大子数组问题(动态规划初级题目)
题目:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的...原创 2020-04-02 12:10:12 · 260 阅读 · 0 评论 -
判断是否是二叉搜索树的遍历结果
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它...原创 2020-04-01 13:49:48 · 149 阅读 · 0 评论 -
二叉树的广度优先遍历(队列的方式)
思路:定义一个二叉树结点队列和一个整形数组,先将树根压入队列,然后依次弹出队列头的结点,将结点的值传入整型数组,同时判断新弹出的结点如果由左右子树,则按次序依次压入队列尾。这样循环进行,直到队列为空,之后输出整型数组。注意判断树是不是一个空树。源代码:class Solution {public: vector<int> PrintFromTopToBottom(Tree...原创 2020-04-01 13:00:24 · 433 阅读 · 0 评论