刷题看java已经小20天了,每天刷一点,递归还有debug一直都不会。
找大佬指导,又被骂惨,感觉自己好像不适合写代码,逻辑思维差,简单的或与非都看不出来,脑子不好真的是有差距的,再次怀疑自己,但只能继续加油。
在写代码的时候存在很严重的问题
- 写代码写一堆 没有逻辑 没有框架(要按照想法写注释 先写什么后写什么 逻辑顺序弄清楚)
- 递归出口 返回值 递归参数 这三个要好好思考
package offer; import java.util.ArrayList; import java.util.List; import java.util.Stack; public class Test37 { public static List树的子结构问题,首先保证能写出来然后再去简化代码。- > getDistanceK(TreeNode root, List
- > list, int k, int sum, List
tempList) { if (root == null) return null; tempList.add(root.val); sum = sum + root.val; //无孩子 if (root.left == null && root.right == null) { if (sum == k) {//是想要的 list.add(tempList); } return list; } else if (root.left != null && root.right == null) {//有左孩子 return getDistanceK(root.left, list, k, sum, tempList); } else if (root.left == null) {//只有右孩子 return getDistanceK(root.right, list, k, sum, tempList); } else {//all getDistanceK(root.right, list, k, sum, new ArrayList<>(tempList)); getDistanceK(root.left, list, k, sum, tempList); // return list; } // // List temp = null; // while (root != null) { // sum += root.val; // temp.add(root.val); // if (sum == k) { // break; // } else if (root.left != null) // return getDistanceK(root.left,list, k); // else if (root.right != null) // return getDistanceK(root.right, list,k); // } // list.add(temp); return list; } //先序遍历 非递归 public static void preOrder(TreeNode root) { if (root == null) return; //构建栈 Stack stack = new Stack<>(); stack.push(root); while (!stack.isEmpty()) { TreeNode treeNode = stack.pop(); System.out.print(treeNode.val); if (treeNode.right != null) stack.push(treeNode.right); if (treeNode.left != null) stack.push(treeNode.left); } } public static void main(String[] args) { TreeNode treeNode = new TreeNode(5); treeNode.left = new TreeNode(3); treeNode.left.left = new TreeNode(2); treeNode.left.right = new TreeNode(4); treeNode.right = new TreeNode(7); treeNode.right.left = new TreeNode(6); treeNode.right.right = new TreeNode(8); //先序遍历结果 preOrder(treeNode); System.out.println(); List - > list = new ArrayList<>();
System.out.println(getDistanceK(treeNode, list, 10, 0, new ArrayList<>()));
}
}
package offer; public class Test38 { public static boolean isSubStructure(TreeNode treeA, TreeNode treeB) { //先判断 AB为空的情况 两个要是空就不行 if (treeA == null || treeB == null) return false; //当两个的根节点数值相等 不相等找左子树 不相等找右子树 //用或 只要有一种情况可以就行 return fun(treeA, treeB) || isSubStructure(treeA.left, treeB) || isSubStructure(treeA.right, treeB); } public static boolean fun(TreeNode treeA, TreeNode treeB) { //判断A B的根节点都相等的情况 //只有一个节点相等 指向的下一个null if (treeB == null) return true; //当A走到没有节点的时候后 B还有则不相等 //A B 的数值不相等 则不是子结构 if (treeA == null || treeA.val != treeB.val) return false; //左右两边都相等才可以 return fun(treeA.left, treeB.left) && fun(treeA.right, treeB.right); } public static void main(String[] args) { TreeNode node6 = new TreeNode(6, null, null); TreeNode node5 = new TreeNode(5, null, null); TreeNode node4 = new TreeNode(4, null, null); TreeNode node3 = new TreeNode(3, node6, null); TreeNode node2 = new TreeNode(2, node4, node5); TreeNode node1 = new TreeNode(1, node2, node3); System.out.println(isSubStructure(node1, node3)); } }多用if-else不丢人,写不出来才丢人,不要一口吃个胖子,多写多debug才行。
-
刷题+springboot框架+github小项目 努力才能有收货
-
在问为什么我每天都很困呢?因为你没有信念,没有重要的事做,当你非常有动力做一件事肯定能起来,现在还不起来小心失业哦



