堆排序

堆排序说简单不简单,说难不难,但是自己一直模棱两可的,虽然自己知道原理,但是一到自己写的时候就会想半天,还可能错了,之前阿里的面试就是,哎,所以这里在总结一下吧。自己从头到尾按着思路自己写一遍。

随笔(二叉树反转)

刚看到有个人在掘金讨论这个问题,,他说应届生都会做然而我咋没做过0.0于是自己搞了一下

先自己顶一个树

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static class TreeNode<T> {
TreeNode<T> leftRoot = null;
TreeNode<T> rightRoot = null;
T t = null;
public TreeNode(T t) {
this.t = t;
}
public void setDate(T t) {
this.t = t;
}
public T getDate() {
return t;
}
}

然后为这个二叉树赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static void main(String[] args) {
int arr[];
arr = new int[15];
LinkedList<TreeNode> linkedList = new LinkedList();
for (int i = 0; i < arr.length; i++) {
linkedList.add(new TreeNode<Integer>(i));
}
int lastParentIndex = arr.length / 2 - 1;
linkedList.get(lastParentIndex).leftRoot = linkedList
.get(lastParentIndex * 2 + 1);
if (arr.length % 2 == 1) {
linkedList.get(lastParentIndex).rightRoot = linkedList
.get(lastParentIndex * 2 + 2);
}
for (int i = 0; i < arr.length / 2 - 1; i++) {
linkedList.get(i).leftRoot = linkedList.get(i * 2 + 1);
linkedList.get(i).rightRoot = linkedList.get(i * 2 + 2);
}

先把这个二叉树的值赋值到一个数组里,然后配合list;

最后对最后一个节点有无右节点判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static TreeNode invertTree(TreeNode treeNode) {
if (treeNode != null) {
TreeNode temp = treeNode.leftRoot;
treeNode.leftRoot = treeNode.rightRoot;
treeNode.rightRoot = temp;
} else {
return null;
}
invertTree(treeNode.leftRoot);
invertTree(treeNode.rightRoot);
return treeNode;
}

这是转换方法。。很好理解哇

然后配合一个队列打印出来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Queue<TreeNode> queue = new LinkedBlockingQueue<>();
queue.add(linkedList.get(0));
while (queue.peek() != null) {
TreeNode root = queue.poll();
System.out.println(root.getDate());
if (root.leftRoot != null) {
queue.add(root.leftRoot);
}
if (root.rightRoot != null) {
queue.add(root.rightRoot);
}
}

线程池~和threadgroup

线程池~开发的过程中多多少少都会遇到这个东西,因为性能比我们每次都去new一个线程好多了~而且之前的那篇Asynctask已经说到了,内部就是线程池完成的,但是线程池究竟分几种,怎么用,哪几种用法?一起来复习下吧~

AsyncTask的再一次探究

AsyncTask是我们学习安卓最开始很容易接触到的一个自带的异步框架,实现起来也是非常的简单,但是我们有没想过他其中的原理呢?如何做到线程的切换呢?为什么一个实例只能execute一次呢?未知的秘密实在是太多了!
|