算法中的二叉樹 java

算法中二叉樹的遞歸定義及遍歷

package com.test.zx;

import java.util.Arrays;
import java.util.Scanner;

import javax.swing.RootPaneContainer;

//二叉排序樹
public class Main {
	public static void main(String[]args){
		BiTree root=new BiTree(100);
		root.add(new BiTree(50));
		root.add(new BiTree(80));
		root.add(new BiTree(40));
		root.add(new BiTree(30));
		
		root.mid_trav();
	}
}

class BiTree{//遞歸定義法
	private int v;
	private BiTree l;//左子樹
	private BiTree r;//右子樹
	
	public BiTree(int x){v=x;}//構造方法
	
	public void add(BiTree the ){
		if(the.v<v){//比根節點小
			if(l==null){//左子樹爲空
				l=the;
			}else {
				l.add(the);//遞歸
			}
		}else{//比根節點大
			if(r==null){//右子樹爲空
				r=the;
			}else{
				r.add(the);//遞歸
			}
		}
	}
	//中序遍歷二叉樹
	public void mid_trav(){
		if(l!=null){
			l.mid_trav();//先遍歷左子樹
		}
		System.out.println(v);
		if(r!=null){
			r.mid_trav();//再遍歷右子樹
		}
	}
}


二叉樹畸形(只有左子樹或只有右子樹)解決方法1:

平衡二叉樹法(左右子樹高度相差不超過1)
LL型--右旋


RR型--左旋


LR型: 先左旋再右旋


RL型:先右旋,在左旋



改進方法2:紅黑樹

定義:每個節點是紅的或黑的

根節點是黑的

葉子結點,空節點是黑的

一個節點是紅的,則它的左右子結點都是黑的

對每個結點,從該結點到其子孫結點的所有路徑上包含相同數目的黑結點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章