![](https://img-blog.csdnimg.cn/20210303184955752.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
剑指 offer
剑指 offer 题目
hanjialeOK
世上无难事,只怕有心人!
展开
-
二叉树后序遍历
二叉树结构/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/后序递归void PostOrder(TreeNode* root){ if(root){ PostOrder(root->left); PostOrder(root->right);原创 2021-03-19 21:30:59 · 67 阅读 · 0 评论 -
二叉树层次遍历
二叉树结构/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/简单层次遍历class Solution {public: void levelOrder(TreeNode* root) { queue<TreeNode*> Q;原创 2021-03-19 16:41:02 · 96 阅读 · 0 评论 -
二叉树中和为某一值的路径
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {原创 2021-03-10 15:10:49 · 100 阅读 · 0 评论 -
23. 二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。解答递归如果内存爆了,那应该是出现了无限递归的情况。仔细检查父函数和子函数的实参有没有可能是相同的。输入的数组可能是空的。class Solution {public: bool d(vector<int> s, int p, int q){ if(p >= q) return true;原创 2020-09-14 21:33:43 · 84 阅读 · 0 评论 -
30. 连续子数组最大和
题目在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和解答动态规划dp[i]表示下标为i时的最大连续子序列和。注意,这里的dp[i]是一定会包含array[i]的,这满足了连续的条件。但是,若dp[i]是负值,那么dp[i]则不会是正确结果。原创 2020-08-26 08:54:55 · 112 阅读 · 0 评论 -
22. 二叉树的层次遍历
题目从上往下打印出二叉树的每个节点,同层节点从左至右打印。解答二叉树 层次遍历 队列class Solution {public: vector<int> PrintFromTopToBottom(TreeNode* root) { vector<int> print; if(!root) return print; queue<TreeNode *> Q; Q.push(root);原创 2020-08-26 09:05:27 · 78 阅读 · 0 评论 -
21. 栈的压入、弹出序列
题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解答栈一开始我还搞不懂题目的意思,以为只能有一种出栈方式。其实1压栈后可以立即出栈,不需要全部压栈后在出栈。用栈模拟就行了class Solution {public: bool Is原创 2020-08-26 21:46:50 · 99 阅读 · 0 评论 -
20. 包含min函数的栈
题目定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。解答栈怎么想都想不出,看到图就懂了。max函数同理。class Solution {public: stack<int> s1, s2; void push(int value) { s1.push(value); if(s2.empty()) s2.push(value); else原创 2020-08-26 21:06:08 · 69 阅读 · 0 评论 -
19. 顺时针打印矩阵
题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]解答循环行数m,列数n。不难发现这是一个循环i = 0, j++ j = n-1, i++i = m-1, j--j = 0, i-- i = 1, j++j = n-2, i++j = m-2, j原创 2020-08-26 22:39:51 · 94 阅读 · 0 评论 -
18. 二叉树的镜像
题目操作给定的二叉树,将其变换为源二叉树的镜像。解答递归这是自下而上的递归(后续遍历)class Solution {public: void Mirror(TreeNode *pRoot) { if(!pRoot) return; Mirror(pRoot->left); Mirror(pRoot->right); TreeNode *tmp = nullptr; tmp = pRoot->原创 2020-08-25 19:00:23 · 72 阅读 · 0 评论