被大佬疯狂diss的一天,说我的代码写的很烂,是坨粑粑。再来五年还不如人家大学本科一年的好。并且说我没有编程思维,不知道如何把自己的想法弄成代码实现。
展示了一下如何写树的前序递归,首先忘了判空,其次写了半天才用链表输出。丢人
菜鸡学习的一天。勤能补拙吧。
判空 递归 分模块实现
package offer;
import java.util.ArrayList;
import java.util.List;
//树递归
class Tree {
int val;
Tree left;
Tree right;
public Tree(int val) {
this.val = val;
}
public Tree() {
}
}
public class Test12 {
/**
* 传进一棵树
*
* @param root
* @return
*/
public static List<Integer> preOrderReader(Tree root) {
List<Integer> list = new ArrayList<>();
preOrder(root, list);
return list;
}
/**
* 传进去的树 传进去的列表
*
* @param root
* @param list list是空值 在里面添加
*/
public static void preOrder(Tree root, List<Integer> list) {
//递归出口
if (root == null)
return;
list.add(root.val);
preOrder(root.left, list);
preOrder(root.right, list);
}
public static void main(String[] args) {
//新建一个树
Tree tree1 = new Tree(2);
Tree tree2 = new Tree(1);
Tree tree3 = new Tree(3);
tree1.left = tree2;
tree1.right = tree3;
//直接输出数值
System.out.println(preOrderReader(tree1));
//构建容器保存下来
List<Integer> list = preOrderReader(tree1);
System.out.println(list);
}
}
get set方法的讲解
作为Java开发,你一定要了解面向对象编程中为什么要使用get和set方法_阿飞云的博客-CSDN博客_为什么要用get和set方法一、由一个问题开始在进行面向对象开发中,在编写一个Class的时候,会定义这个Class的属性(字段)为Private,然后去生成对应的get和set方法,通过这样的方式去对属性进行操作,那你有没有思考过为什么要这样做呢?这样做有哪些好处呢?请先自行思考30秒,在看下面的内容。二、回顾相关知识回答这个问题之前,让我们先回顾一些的基础知识:1、访问修饰符,从访问的范围由小及大依次是:pri...https://aflyun.blog.csdn.net/article/details/88095865?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-88095865-blog-52725245.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-88095865-blog-52725245.pc_relevant_aa&utm_relevant_index=1关于面向对象编程中很多人用get()和set()方法,而不用public的一点总结_llittlebird001的博客-CSDN博客在很多程序中,都喜欢定义一个privata变量,然后为这个私有变量加上get(),set()方法。那为什么不直接定义一个public变量呢?这样做到底有什么好处和意义呢?难道真的仅仅只是为了代码规范?别逗了,不管你信不信,反正我是不信!带着这个问题我在网上寻找答案,真是众说纷纭啊,每个人都能说出一点点道理,但是却都不足以说服我!(所以在这里做一些总结,和大家分享,我们共同学习,共同进步。如果有什么
https://blog.csdn.net/llittlebird001/article/details/52725245
- 前k小的数--变形的快速排序
package offer; /* 1 快速排序 2 输入n个整数,找出其中最小的k个数。 方法一:全部排一遍 输出前K个数 方法二: */ public class Test16 { /** * 左边位索引 右边索引 * * @param arr * @param left * @param right */ public static void quickSort(int[] arr, int left, int right) { //不合法情况 结束判断 if (left > right) return; //准备所需要的变量 保存基准数 int base = arr[left]; int i = left, j = right; //开始检索 重复的操作 i与j相遇的时候停止一次检索 while (i != j) { //先由j从右往左 移动比基准数小的while这个条件不成立 //检索不能越界 while (arr[j] >= base && i < j) j--; //由i从右往左走 移动比基准数大的 while (arr[i] <= base && i < j) i++; //代码走到这里停下来了 需要交换两个不在应该存在位置的数 int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } //已经划分好一次左右两边区间了 两个相遇了一次 //相遇位置 arr[left] = arr[j]; //再把基准数赋值给相遇位置的数 arr[j] = base; //左边的数都比他小 右边的都比他大 quickSort(arr, left, i - 1); quickSort(arr, j + 1, right); } public static void main(String[] args) { int[] arr = {4, 7, 8, 1, 2, 3, 5, 6,}; quickSort(arr, 0, 7); for (int i : arr) { System.out.println(i); } } }
用小根堆 大根堆的还没有看到。。。谷歌的题目是两个数组任意的和的中位数 取前k个。。我只能说我不配进谷歌