树和二叉树

1.在算法中可以用数组来表示一棵树

2.在树中主要用到的方法是递归。

3.二叉树只有两个树枝。发展成左子树和右子树。

4.树的遍历方式:先序遍历 中序遍历 后续遍历

  • 先序遍历 根左右
  • 后序遍历 左根右
  • 后续遍历 左右根
    //二叉树先序遍历
    	public static void f(int[] arr,int i)
    	{
    		if(i>=arr.length)
    			return;
    		System.out.print(arr[i]);//先输出根节点
    		f(arr,i+1);//输出左子树
    		f(arr,i+2);//输出右子树
    	}

  • 堆的概念:是完全二叉树或者近似二叉树

  • 二叉堆有两种:最大堆和最小堆。最大堆:父结点的键值总是大于或等于任何一个子节点的键值;最小堆:父结点的键值总是小于或等于任何一个子节点的键值。

  • 在二叉堆上可以进行插入节点、删除节点、取出值最小的节点、减小节点的值等基本操作。

堆排序:

树和二叉树_第1张图片

 

同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子

树和二叉树_第2张图片

该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是:

大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]  

小顶堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2]  

 

小顶堆的伪代码:

public static void main(String[] args) {
		// TODO Auto-generated method stub
      
	}
	public static void MinHeap(int A[])
	{
		int n=A.length;
		for(int i=0;i=n)
		{
			return;
		}
		int min=left;
		if(right>=n)
		{
			min=left;
		}
		else
		{
			if(A[right]

你可能感兴趣的:(基础算法,java)