TypechoJoeTheme

Toasobi的博客

最新文章

2023-03-16

从上打印二叉树2(中等)

从上打印二叉树2(中等)
- 这题上一题是从上至下打印二叉树,其实就是层序遍历,**这题多了一个偶数高度的数组要逆转。** 上面是上一题的图。虽然是层序遍历,但是要求是每一层的数据都要一个list存储。所以这两道题的难点之一就是如何知道哪些数据是在同一个高度的,并将这些数据放入各个list中。而第二个难点就是逆转数组了对于如何知道数据是否在一个高度,我一开始的想法是用hashmap,key值存储高度,value存储数据。但是由于hashmap的key值不能重复只能就此作罢。我甚至想到了使用2的指数表示每一层的元素个数,同时使用一个int记录该层缺失多少元素。但是由于该层缺失多少元素非常难求,这个方法在只有一条线的二叉树面前直接寄掉了;;最后是题解给我的启发,在每次对队列添加完一层的元素后使用队列的长度作为for循环的临界值,每次for循环完成后表示一层的数据都遍历完成,在for循环中每遍历一个添加至一个list中,最后放入大list中,并重新new list()将list全部重置。代码如下:<div>/** * Definition for a binary tree node. * pu...
2023-03-16

剑指offer(第二版)

0 阅读
0 评论
2023年03月16日
0 阅读
0 评论
2023-03-16

栈的压入,弹出顺序(中等)

栈的压入,弹出顺序(中等)
这道题主要看你想没想到解题思路,想到了这道题就很简单思路:将pushed按照顺序压入栈中,每压一次就要判读栈顶元素是否和poped数组首位相同,如果相同则弹栈,并且while继续比较后一位。最后如果栈为空,则表示该poped是pushed的弹出序列代码如下(已加注释):<div>class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { LinkedList<Integer> stack = new LinkedList<>(); int index; //pushed下标位 int index2 = 0; //poped下标位 int point = 0; //栈中指针 为0则栈为空 boolean flag = false; //代表传入的参数是否有进入下面的判断,没有进入说明pushed长度为0 //按顺序压入 ...
2023-03-16

剑指offer(第二版)

0 阅读
0 评论
2023年03月16日
0 阅读
0 评论
2023-03-16

顺时针打印矩阵(简单)

顺时针打印矩阵(简单)
这道题主要可以使用模拟法来做。可以模拟打印矩阵的路径。初始位置是矩阵的左上角,初始方向是向右,当路径超出界限或者进入之前访问过的位置时,顺时针旋转,进入下一个方向。判断路径是否进入之前访问过的位置需要使用一个与输入矩阵大小相同的辅助矩阵 \textit{visited}visited,其中的每个元素表示该位置是否被访问过。当一个元素被访问时,将 \textit{visited}visited 中的对应位置的元素设为已访问。如何判断路径是否结束?由于矩阵中的每个元素都被访问一次,因此路径的长度即为矩阵中的元素数量,当路径的长度达到矩阵中的元素数量时即为完整路径,将该路径返回。仔细想一想,这道题好像和DP有点像。。下面是代码(注释讲解):<div>class Solution { public int[] spiralOrder(int[][] matrix) { if (matrix == null || matrix.length == 0 || matrix[0].length == 0) { return new i...
2023-03-16

剑指offer(第二版)

0 阅读
0 评论
2023年03月16日
0 阅读
0 评论
2023-03-14

对称的二叉树(简单)

对称的二叉树(简单)
这个题我做的真的恼火。当时我的思路是对每一个子节点进行入栈操作,如果入栈时等于栈顶节点,则栈顶节点出栈。最后如果栈为空则树为对称的。但是这样就需要使用层序遍历出所有节点,再对所有节点进行入栈操作。方法也是可行的。====================方法二:递归====================递归判断的是两个节点是否都为空或都不为空。以及两个节点的值是否相等。下一次递归传入的是节点1的左节点和节点2的右节点以及节点1的右节点和节点2的左节点。(二叉树是镜像的,它的根得是相同的吧,同时他的左右子节点是相互对称的。)代码如下:<div>class Solution { public boolean isSymmetric(TreeNode root) { if (root == null) return true; return helper(root.left, root.right); } public boolean helper(TreeNode root1, TreeNo...
2023-03-14

剑指offer(第二版)

0 阅读
0 评论
2023年03月14日
0 阅读
0 评论
2023-03-14

二叉树的镜像(简单)

二叉树的镜像(简单)
就是递归,转换左右节点代码如下:<div>class Solution { public TreeNode mirrorTree(TreeNode root) { reverse(root); return root; } public void reverse(TreeNode root){ //递归 if(root == null || (root.left == null && root.right == null)){ return; } TreeNode temp; temp = root.left; root.left = root.right; root.right = temp; reverse(root.left); reverse(root.right); } }</div>
2023-03-14

剑指offer(第二版)

0 阅读
0 评论
2023年03月14日
0 阅读
0 评论