剑指offerJZ7题 重建二叉树
描述 剑指offerjz7题 给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。
方法一:递归 思路:前序遍历数组第一个即是根节点,第二个是根节点的左节点。在中序遍历数组中找到根节点,根节点前面的元素个数便是根节点左子树的元素个数,根节点后面的元素个数即是根节点右子树的元素个数。已知根节点左右子树的元素个数,再回到前序遍历数组,即可找到根节点的右节点。 代码实现:
12345678910111213141516171819202122232425262728293031/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } ...
斐波那契(黄金分割法)查找算法(java)
斐波那契(黄金分割法)查找算法 (java)一、介绍1、斐波那契数列形如1、1、2、3、5、8、13、21、34……的数列,并且从第三项开始,每项的值为前两项之和。并且随着数列的增大,数列前一个数字除以后一个数字的结果越接近黄金分割比。
二、算法思路 1.获取长度恰好为斐波那契数列中的数字的有序数组(长度不够即扩容),由斐波那契数列的性质可知:F(k) = F(k-1) + F(k-2)。我们将数组的总长度记为F(k),所以我们可以将数组分割为两部分:前部分的长度为F(k-1),后部分的长度为F(k-2)。前部分长度比后部分长度近似黄金分割比。
2.在两部分的交界处寻找到一个中间点,将需要查找的值与中间点比较,若小于中间点,说明目标值在前半部分,由于前半部分的长度也为斐波那契数列中的数值,所以可以直接重复第一步操作,分割数组,比较查值。若目标值大于中间点,同理。
三、代码实现1234567891011121314151617181920212223242526272829303132333435363738394041 public int fiboReserch(i ...
快速查找算法学习笔记(Java)
一、实现思路1.寻找一个位于数列中部的数字,记为pivot。
2.分别在目标数段的左端和右端开始遍历,在左方,寻找值大于或等于pivot的数字,在右方,寻找值小于或等于pivot的数字,并且依此交换。
3.完成一轮交换后,在pivot的左方应为无序但都小于pivot的数字段,右方同理。
4.使用递归,分别在pivot的左方和右方再次调用快速查找的方法。
二、代码实现123456789101112131415161718192021222324252627282930public void quickSort(int[] arr, int left, int right) { int l = left; //左方开始的点 int r = right; //右方开始的点 int pivot =arr[(left + right) / 2]; //中间值 int temp; //临时变量,用于数列不同位置交换数值 while (l < r) { //当左点小于右点时,意味着数列未遍历完毕,继续执行代码。 ...
java reflection 基础学习笔记
一、反射机制1.加载完类之后,会在堆中生成一个Class类型的对象,该对象包含了类的完整结构信息,通过这个对象可以得到类的结构。
二、反射相关类常用方法Cat类在com.why文件夹下:
123456789class Cat { public name = "泡二粑"; public Cat(String name) { this.name = name; } public void hi() { Syestem.out.println("喵喵~"); }}
1.通过字符串获得Cat类的Class类型对象:Class aClass = Class.forName("com.why.Cat");
2.通过获得的Class类型对象创建一个Cat类型对象:Cat o = (Cat)aClass.newInstance();
3.通过Class类型对象获得public修饰的方法hi的Method对象:Metho ...
Markdown语法基础学习笔记
[CSDN小小白白蛆]Markdown语法基础学习笔记_markdown代码块-CSDN博客)