线索二叉树(java)
1.根据前序创建二叉树
2.线索化
3.中序遍历
import java.util.Scanner; enum PointterTag{ Link,Thread; } class BiThrNode{ char data; BiThrNode lchild,rchild; PointterTag LTag=PointterTag.Link,RTag=PointterTag.Link; } public class Main{ static char[] chs; static int index; static BiThrNode pre=new BiThrNode(); static BiThrNode createTree() { if(chs[index]==' ') { index++; return null; } BiThrNode root=new BiThrNode(); root.data=chs[index++]; root.lchild=createTree(); root.rchild=createTree(); return root; } static void inOrderThreading(BiThrNode Thrt,BiThrNode T) { Thrt.LTag=PointterTag.Link; Thrt.RTag=PointterTag.Thread; Thrt.rchild=Thrt; if(T==null)Thrt.lchild=Thrt; else { Thrt.lchild=T;pre=Thrt; inThreading(T); pre.RTag=PointterTag.Thread; pre.rchild=Thrt; Thrt.rchild=pre; } } static void inThreading(BiThrNode p) { if(p!=null) { inThreading(p.lchild); if(p.lchild==null) {p.LTag=PointterTag.Thread;p.lchild=pre;} if(pre.rchild==null) {pre.RTag=PointterTag.Thread;pre.rchild=p;} pre=p; inThreading(p.rchild); } } static void inOrderTravels(BiThrNode Thrt) { BiThrNode p=Thrt.lchild; while(p!=Thrt) { while(p.LTag==PointterTag.Link)p=p.lchild; System.out.print(p.data+" ");//visit; while(p.RTag==PointterTag.Thread&&p.rchild!=Thrt) { p=p.rchild; System.out.print(p.data+" "); } p=p.rchild; } } public static void main(String[] args) { Scanner sc=new Scanner(System.in); BiThrNode Thrt =new BiThrNode(); BiThrNode T; chs=sc.nextLine().toCharArray(); T=createTree(); inOrderThreading(Thrt, T); inOrderTravels(Thrt); } }
stay hungry stay foolish

浙公网安备 33010602011771号