剑指-28 对称的二叉树 技术分类 思路对称的定义,根节点相等,左右子树对称,因此可以使用递归遍历递归截止条件1)根节点值相等3)使用两个指针,一个左子树遍历,一个右子树遍历,如果这两个指针始终相等,则表示左右子树是对称的/** * Definition for a binary tree node. * public class T
剑指-27 树的翻转 技术分类 思路递归翻转左右子树,则可以获取翻转树递归终止条件1)输入的节点为null2)左右子树交换结束/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left;
剑指-26 树的子结构 技术分类 题目地址思路判断子结构,也就是说可能存三种情况完全和树相同和树的右子树相同和树的左子树相同递归判断/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left
剑指-32 从上到下打印二叉树 III 技术分类 题目地址思路同上一题的思路,层序遍历+队列确认长度遍历相对上一题多了一个奇偶判断,选择左/右顺序输出,通过数组头插法或者尾插法就可以实现调整输出顺序/** * Definition for a binary tree node. * public class TreeNode { * int
剑指-32 从上到下打印二叉树 Ⅱ 技术分类 题目地址思路还是层序遍历,但是相对于上一题有所变化。每层的结果单独打印成一行需要记录每层的元素个数,或者可以记录上一行元素个数根据观察,队列每次处理一层的节点前,队列中保留的是该层的所有节点,因此可以在处理队列节点前,通过队列的长度获取上一层的元素节点数目/** * Definition for a
剑指-32 从上到下打印二叉树 技术分类 题目地址思路:属于二叉树的层序遍历二叉树常见遍历方式:前序遍历,中序遍历,后序遍历,层序遍历等层序遍历需要保证每层遍历的顺序性,每层节点的先后顺序。因此可以利用队列来保存每层节点的顺序性(这里需要记一下队列常用api,add,poll,peek)
剑指-53 在排序数组中查找数字 I 技术分类 思路1因为已经是排序的,只要直接遍历就可以了,找到第一个target后开始计数,统计有几个相同值class Solution { public int search(int[] nums, int target) { if (nums.length == 0) return 0;
hot100-5 最长回文子串 技术分类 题目地址思路1(时间复杂度过高,朴素思路):使用分格子的思想,求出当格子为1、2、3、4...max(max = 字符串长度)时是否存在回文子串如果当格子中的字符串是回文的时候,看看是否需要更新回文子串最大值class Solution { public String longestPalin
剑指-05 替换空格 技术分类 思路字符串转为char数组(注意api是toCharArray)遍历数组,遇到空格' '转成%20追加到字符串中(' '占一位,%20占三位) public String replaceSpace(String s) { char[] chars = s.toCharArray();
剑指-35 复杂链表复制 技术分类 思路一链表节点的定义包含三个属性,一个val一个next指针,一个random指针复制的时候每个节点需要重新new一个实例val和next指针比较简单,主要是random指针的处理,这里需要保存节点在整个链表中的相对位置。核心思路就是在处理复制原节点的时候,从map中获取random节点的相对位置(