数据结构与算法
文章平均质量分 54
沫子03
这个作者很懒,什么都没留下…
展开
-
力扣216组合总和2
方法:回溯class Solution { public List<List<Integer>>resul=new ArrayList<>(); public List<Integer>path=new ArrayList<>(); static int sum=0; public List<List<Integer>> combinationSum3(int k, int n原创 2023-02-26 21:00:36 · 53 阅读 · 0 评论 -
力扣77组合
方法:回溯法回溯三部曲:模板class Solution { //回溯法 //全局变量 public List<List<Integer>>resul=new ArrayList<>(); public List<Integer>path=new ArrayList<>(); public List<List<Integer>> combine(int n, int k)原创 2023-02-26 20:58:28 · 46 阅读 · 0 评论 -
力扣104二叉树的最大深度
方法:层序遍历,迭代法。思路:头结点不为空则入队,为空则dep为0。初始化每层结点数num,进入循环。出栈一个元素,将它的左右结点入栈,num减1,flag为1。如果num为0并且flag为1,num为0说明当前层的结点都出队了,flag为1说明有孩子入队,还有下一层。dep加1,flag初始为0,重新统计下一层的结点数num。当队为空返回dep。/*** Definition for a binary tree node.* public class TreeNode {原创 2023-02-23 21:58:46 · 27 阅读 · 0 评论 -
力扣101对称二叉树
方法1:递归法递归三部曲确定递归函数的参数和返回值,确定终止条件,确定单层递归的逻辑。思路:传入左右结点,如果只有一个为空,返回false,如果都为空,说明没有子结点了,返回true,如果值不想等,返回false,如果值相等,分别调用函数比较外部结点和内部结点,看是否相等。/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* T原创 2023-02-23 21:39:31 · 31 阅读 · 0 评论 -
二叉树的层序遍历Ⅱ
思路:在二叉树的遍历基础上将resul中的元素倒着存入resul1。/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int原创 2023-02-21 22:01:03 · 45 阅读 · 0 评论 -
二叉树的层序遍历
广度优先搜索(层序遍历)迭代法,用队列 题目思路:用队列,num统计每一层的结点数。队列不为空为循环条件。如果num不为0,出队列,并把它的左右孩子入队列。num为0,表示一层遍历完成,将这一层添加到resul中。(resul的定义的意思是往resul中添加List),当想清除list不能用clear,因为resul中存的list的地址,如果给list清空,resul中数据也会清空。但是可以初始化list,得到新的地址再存下一层结点。/*** Definition for a binar原创 2023-02-21 21:51:46 · 32 阅读 · 0 评论 -
二叉树的中序遍历(迭代法)
二叉树的遍历方式: 深度优先遍历:先往深走,遇到叶子结点往回走。(前序,中序,后序遍历(都可以用递归法,迭代法解决)) 广度优先遍历:一层一层遍历。(层序遍历(迭代法解决)) 题目:二叉树的迭代遍历(中序)迭代法难点:先序遍历先访问的是中间结点,先处理的也是中间结点。后序遍历可由先序遍历改变顺序得到。而中序遍历先访问中间结点,然后不断向下访问,直到最底部的左结点才开始处理结点。/*** Definition for a binary tree node.* pub原创 2023-02-21 21:29:06 · 228 阅读 · 0 评论 -
二叉树的前序,后序遍历
方法:迭代法(使用栈)思路:前序遍历:入栈根节点,当栈不为空,取出栈顶元素,如果栈顶元素不为空,存入数组,并将它的右结点,左结点分别入栈(因为栈先进后出的特征,因此先放右结点);为空则continue。当栈中没有元素结束循环,返回数组。后序遍历:在前序遍历的基础上,先左结点进栈,再右结点进栈(根右左)。反转数组(左右根)便可得到后序遍历结果。/*** Definition for a binary tree node.* public class TreeNode {*原创 2023-02-21 08:26:25 · 168 阅读 · 0 评论 -
力扣383. 赎金信
字符串里全是小写字母,个数确定,用数组。下标表示字母,元素表示出现次数。遍历第一个字符串,对应下标次数加1,再遍历第二个字符串,在两个字符串都出现的字母下标减1。最后遍历数组,元素有不为0的返回false,否则返回true。要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。原创 2023-01-24 13:44:52 · 33 阅读 · 0 评论 -
力扣454. 四数相加 II
思路:前两个数组两两相加,存入map,元素存在,初始化次数为1。元素不存在,对应元素次数加1。用0减去剩下两个数组两两相加的结果,得到在map中需要寻找的值。找到了,sum+次数。原创 2023-01-24 13:28:25 · 34 阅读 · 0 评论 -
力扣15. 三数之和
思路:给数组排序,当sum大于0,说明大了,right指针向左移动;小于0,说明小了,left指针向右移动;当等于0,存入并且判断重复来移动指针(去重操作)。原创 2023-01-23 10:53:46 · 33 阅读 · 0 评论 -
力扣203移除链表元素
将第一种情况单独处理,返回头结点。其他情况用while循环来判断,当遇到某个结点的val值与题目所给val值相等,做删除操作;反之移动temp到下一个结点。设置一个临时变量temp并指向头结点(注意题目的头结点指向的第一个元素)。这里我们分三种情况:①链表为空 ②只有一个结点 ③有两个及其以上结点。然后再判断头结点val值,与题目val值相等则移动头结点。:用一个指针的移动直接在链表上进行删除。单链表结点的删除需要知道它的前一个结点。原创 2023-01-04 13:50:19 · 87 阅读 · 1 评论