您的位置:首页 > 编程语言 > Java开发

线索化二叉查找树 java实现

2014-02-21 15:13 645 查看
package TreadTree;

class Node{
int data;
Node left;
boolean lthread;
Node right;
boolean rthread;
public Node(){
left=null;
right=null;
lthread=false;
rthread=false;
}
}

public class ThreadTree {
public static Node getMostLeft(Node tree){
Node p=tree;
Node q=tree.left;
while(q!=null){
p=q;
q=p.left;
}
return p;
}
public static Node getMostRight(Node tree){
Node p=tree;
Node q=tree.right;
while(q!=null){
p=q;
q=p.right;
}
return p;
}
public static Node getPos(Node tree,int data){
Node p=tree;
Node q=null;
if(data>p.data){
q=p.right;
}else{
q=p.left;
}
while(q!=null){
p=q;
if(data>p.data){
q=p.right;
}else{
q=p.left;
}
}
return p;
}
public static Node createTree(int[] datas){
Node tree=new Node();
tree.data=datas[0];
for(int i=1;i<datas.length;i++){
Node added=new Node();
added.data=datas[i];
Node pos=getPos(tree,datas[i]);
if(datas[i]>pos.data){
pos.right=added;
}else{
pos.left=added;
}
}
return tree;
}
public static void ordinaryViewTree(Node tree){
if(tree.left!=null){
ordinaryViewTree(tree.left);
}
System.out.println(tree.data);
if(tree.right!=null){
ordinaryViewTree(tree.right);
}
}
public static void viewTree(Node tree){
Node p=tree;
while(p!=null){
while(p.left!=null){
p=p.left;
}
while(p.rthread==true){
System.out.println(p.data);
p=p.right;
}
p=p.right;
}
}

public static Node trans(Node tree){
Node p=null;//记录链表头;
p=getMostLeft(tree);
if(tree.left!=null){
Node rightNode=getMostRight(tree.left);
trans(tree.left);
rightNode.right=tree;
rightNode.rthread=true;
}
if(tree.right!=null){
Node leftNode=getMostLeft(tree.right);
trans(tree.right);
leftNode.left=tree;
leftNode.lthread=true;
}
return p;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] dataList = args[0].split(",");
int[] datas = new int[dataList.length];
for (int i = 0; i < dataList.length; i++) {
datas[i] = Integer.parseInt(dataList[i]);
}
Node tree=createTree(datas);
ordinaryViewTree(tree);
Node p=trans(tree);
System.out.println("list is:");
while(p!=null){
System.out.println(p.data);
p=p.right;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: