使用递归实现,具体在trans方法
package TransTreeToDList;
class Node{
int data;
Node left;
Node right;
public Node(){
left=null;
right=null;
}
}
public class TranTreeToList {
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 viewTree(Node tree){
if(tree.left!=null){
viewTree(tree.left);
}
System.out.println(tree.data);
if(tree.right!=null){
viewTree(tree.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;
tree.left=rightNode;
}
if(tree.right!=null){
Node leftNode=getMostLeft(tree.right);
trans(tree.right);
leftNode.left=tree;
tree.right=leftNode;
}
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);
viewTree(tree);
Node p=trans(tree);
System.out.println("list is:");
while(p!=null){
System.out.println(p.data);
p=p.right;
}
}
}