package tree;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class treeToList {
static Scanner sc=new Scanner(System.in);
static Queue<BinaryTree> queue=new LinkedList<BinaryTree>();
static BinaryTree tail;
public static void main(String args[]){
BinaryTree t1=create();
BinaryTree newtree=convertTree(t1);
System.out.println();
}
//返回第一个,就是最左边的
private static BinaryTree convertTree(BinaryTree t1) {
// TODO Auto-generated method stub
tail=null;
convert(t1);
BinaryTree head=t1;
while(t1!=null&&t1.left!=null){
t1=t1.left;
}
return t1;
}
//按中序遍历的顺序,修改结点,节点的左右孩子指针表示链表的前后指针,需要一个全局的尾节点在标识当前节点的上一个节点。
private static void convert(BinaryTree t1) {
// TODO Auto-generated method stub
if(t1==null)return;
BinaryTree pcur=t1;
if(pcur.left!=null)convert(pcur.left);
pcur.left=tail;
if(tail!=null)tail.right=pcur;
tail=pcur;
if(pcur.right!=null)convert(pcur.right);
}
public static BinaryTree create(){
BinaryTree tree;
int vl=sc.nextInt();
if(vl==-1){
tree=null;
}else{
tree=new BinaryTree();
tree.data=vl;
tree.left=create();
tree.right=create();
}
return tree;
}
}
每天一个算法之树变双向列表
最新推荐文章于 2024-07-08 13:52:25 发布
