算法中二叉樹的遞歸定義及遍歷
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)
LL型--右旋
RR型--左旋
LR型: 先左旋再右旋
RL型:先右旋,在左旋
改進方法2:紅黑樹
定義:每個節點是紅的或黑的
根節點是黑的
葉子結點,空節點是黑的
一個節點是紅的,則它的左右子結點都是黑的
對每個結點,從該結點到其子孫結點的所有路徑上包含相同數目的黑結點