代码随想录回溯预习
回溯算法理论基础代码模板 123456789void backtrack(int t) { if (t > n) output(x); else { for (int i = f(n, t); i <= g(n, t); i++) { x[t] = h(i);//当前解 if (constraint(t) && bound(t)) backtrack(t + 1); } ...
回溯
...
代码随想录算法训练营第十八天-513-112-106
513. 找树左下角的值第一眼感觉用层序可以很快的找到最下一面层,然后再判断是 确实卡哥也说层序更加的简单 层序遍历12345678910111213141516171819202122232425int getMaxheight(TreeNode *node) { if (node == NULL) return 0; return max(getMaxheight(node->left), getMaxheight(node->right)) + 1;}int findBottomLeftValue(TreeNode *root) { //个人尝试用层序遍历 //如何判断是最后一层,求最大深度? int h = getMaxheight(root); int curH = 0;//最开始的时候在第一层,深度也是1 queue<TreeNode *> q; if (root != NULL) q.push(root); while (!q.empty()) {...
代码随想录算法训练营第十七天-110-257-404
110.平衡二叉树 个人记忆口诀:高度就是把这棵树放在地面上,叶子节点接触地面。看成叶子结点距离地面最近,按照高楼的思路来计数的话,叶子节点是一楼,所以高度是1。依次网上面是二楼,三楼等等,因此高度就是2,3 等等。 深度就是像植物的根系一样,往下扎根,所以把根结点看作是从地下网上靠近的植物的根。越往上就说明这个根扎的越不深,因此深度最低,就只是一。越往下说明扎的越深,因此深度依次增加,为2,3等等 卡哥说,递归的话,用后序遍历求高度,,因为左右中的顺序能很好地将子节点的信息,例如高度返回给子树的根结点,然后该根节点再根据两个高度信息进行操作了。必须知道左右子树的高度信息,才能对该根节点的进行操作的情况我们就要用递归的后序遍历。 用前序遍历求深度,因为中左右的顺序像是往下探索,左和右在中之后,就可以将中的信息传给左和右了。 迭代法在网站上,没时间看,有空再看 后序遍历123456789101112131415161718192021222324class Solution {public:int getHeight(TreeNode *root) { ...
代码随想录算法训练营day16-104-111-222
104. 二叉树的最大深度https://leetcode.cn/problems/maximum-depth-of-binary-tree/solutions/2774231/104-er-cha-shu-de-zui-da-shen-du-by-joke-tvk9 后序遍历 123456789class Solution {public: int maxDepth(TreeNode *root) { if (root == NULL) return 0; int l = maxDepth(root->left) + 1; int r = maxDepth(root->right) + 1; return l > r ? l : r; }}; 先序遍历,有点回溯的感觉 层序遍历明天看,效率太低了 111. 二叉树的最小深度想法一123456789101112131415161718int minDepth(TreeNode *root) {...
代码随想录算法训练营第十五天|102 226 101
102. 二叉树的层序遍历https://leetcode.cn/problems/binary-tree-level-order-traversal/solutions/2774207/102-er-cha-shu-de-ceng-xu-bian-li-by-jok-9c45 226. 翻转二叉树https://leetcode.cn/problems/invert-binary-tree/solutions/2774554/226-fan-zhuan-er-cha-shu-by-joker-ek4-c5xs 递归写法前序12345678910class Solution {public: TreeNode *invertTree(TreeNode *root) { if(root == NULL) return NULL; swap(root->left, root->right); invertTree(root->left); ...
代码随想录算法训练营第十四天
以下内容均来自https://programmercarl.com/ carl哥的(程序员Carl (opens new window))的原创。 我仅做学习过程中的笔记总结。帮助自己理解记忆,绝不做任何商业盈利用途。如觉得侵权,请联系微信BradTorres,我一定删除。 理论基础这两种遍历是图论中最基本的两种遍历方式,后面在介绍图论的时候 还会介绍到。 那么从深度优先遍历和广度优先遍历进一步拓展,才有如下遍历方式: 深度优先遍历 前序遍历(递归法,迭代法) 中序遍历(递归法,迭代法) 后序遍历(递归法,迭代法) 广度优先遍历 层次遍历(迭代法) 在深度优先遍历中:有三个顺序,前中后序遍历, 有同学总分不清这三个顺序,经常搞混,我这里教大家一个技巧。 这里前中后,其实指的就是中间节点的遍历顺序,只要大家记住...
代码随想录算法训练营第十三天-239,347,总结
239. 滑动窗口最大值教程【C15【模板】单调队列 滑动窗口最值】 https://www.bilibili.com/video/BV1H5411j7o6/?share_source=copy_web&vd_source=82180e49f17daecf14bb6f246fc29cd0 【单调队列 滑动窗口最大值【基础算法精讲 27】】 https://www.bilibili.com/video/BV1bM411X72E/?share_source=copy_web&vd_source=82180e49f17daecf14bb6f246fc29cd0 【单调队列正式登场!| LeetCode:239. 滑动窗口最大值】 https://www.bilibili.com/video/BV1XS4y1p7qj/?share_source=copy_web&vd_source=82180e49f17daecf14bb6f246fc29cd0 用队列模拟 1234567891011121314151617181920class Solution...
图
...
代码随想录算法训练营第十一天-20,1047,150
20. 有效的括号https://leetcode.cn/problems/valid-parentheses/solutions/2771702/20-you-xiao-de-gua-hao-by-joker-ek4-zsmo C可能的写法,不用STL 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182#include <stdio.h>#include <stdlib.h>#define MaxSize 10000// #define SIZE(a) (sizeof(a) / sizeof(a[0]))typedef char ElemType;typedef struct{ ElemType data[MaxSize]; int top;}...