📄 ptree.java
字号:
import java.io.*;
import java.awt.*;
import javax.swing.*;
public class PTree
{
private Node root;
private int type;
private int number=1;
public PTree()
{
root=null;
}
public void BuildTree(LinkNode[] link)
{
String string=" ";
Node temp;
char[] c;
if(link!=null)
{
root=new Node(link[0].getRoot().getNString());
System.out.println("选择一种推导方式:");
System.out.println("1:最左推导 2:最右推导 3:一般推导 ");
System.out.print("选择:");
try{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
string=in.readLine();
}catch(IOException e){}
c=string.toCharArray();
if(c[0]=='1')
{
System.out.println(root.getString());
goLeft(root,link);
type=1;
}
if(c[0]=='2')
{
System.out.println(root.getString());
goRight(root,link);
type=2;
}
if(c[0]=='3')
{
System.out.println(root.getString());
goRandom(root,link);
type=3;
}
}
}
public void goLeft(Node Root,LinkNode[] link)
{
String string=" ";
int m=-1,n=0;
char[] temp1,temp2;
char[] pr;
Node temp;
if(Root==null) ;
else if(Root.getString().toCharArray()[0]!=NewString.ending &&Root.getString().toCharArray()[0]!='+'&&Root.getString().toCharArray()[0]!='-'&&Root.getString().toCharArray()[0]!='*'&&Root.getString().toCharArray()[0]!='/')
{
if(n!=1)
{
Root.setVisit(1);
temp1=Root.getString().toCharArray();
for(int i=0;i<link.length;i++)
{
temp2=link[i].getRoot().getString().toCharArray();
if(temp1[0]==temp2[0]) n=i;
}
temp=link[n].getRoot();
System.out.println();
System.out.println("选择一个推导的右部:");
for(int i=1;i<temp.findAdj().length;i++)
System.out.print((i)+": "+temp.findAdj()[i].getString()+" ");
try{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
string=in.readLine();
}catch(IOException e){}
m=StringToInt(string);
if(temp.getIndexAdj(m).getString().length()==2)
{
Node o=new Node(temp.getIndexAdj(m).getIndexAdj(1).getNString());
Root.setChild(o,null,null);
number++;
}
else
{
Node o=new Node(temp.getIndexAdj(m).getIndexAdj(1).getNString());
Node o1=new Node(temp.getIndexAdj(m).getIndexAdj(2).getNString());
Node o2=new Node(temp.getIndexAdj(m).getIndexAdj(3).getNString());
Root.setChild(o,o1,o2);
number=number+3;
}
PrintTree(root);
goLeft(Root.getLeft(),link);
goLeft(Root.getRight(),link);
}
}
}
public void goRight(Node Root,LinkNode[] link)
{
String string=" ";
int m=-1,n=0;
char[] temp1,temp2;
char[] pr;
Node temp;
if(Root==null) ;
else if(Root.getString().toCharArray()[0]!=NewString.ending&&Root.getString().toCharArray()[0]!='+'&&Root.getString().toCharArray()[0]!='-'&&Root.getString().toCharArray()[0]!='*'&&Root.getString().toCharArray()[0]!='/')
{
if(n!=1)
{
Root.setVisit(1);
temp1=Root.getString().toCharArray();
for(int i=0;i<link.length;i++)
{
temp2=link[i].getRoot().getString().toCharArray();
if(temp1[0]==temp2[0]) n=i;
}
temp=link[n].getRoot();
System.out.println();
System.out.println("选择一个推导的右部:");
for(int i=1;i<temp.findAdj().length;i++)
System.out.print((i)+": "+temp.findAdj()[i].getString()+" ");
try{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
string=in.readLine();
}catch(IOException e){}
m=StringToInt(string);
if(temp.getIndexAdj(m).getString().length()==2)
{
Node o=new Node(temp.getIndexAdj(m).getIndexAdj(1).getNString());
Root.setChild(null,null,o);
number++;
}
else
{
Node o=new Node(temp.getIndexAdj(m).getIndexAdj(1).getNString());
Node o1=new Node(temp.getIndexAdj(m).getIndexAdj(2).getNString());
Node o2=new Node(temp.getIndexAdj(m).getIndexAdj(3).getNString());
Root.setChild(o,o1,o2);
number=number+3;
}
PrintTree(root);
goRight(Root.getRight(),link);
goRight(Root.getLeft(),link);
}
}
}
public void goRandom(Node Root,LinkNode[] link)
{
String string=" ";
int m=-1,n=0;
char[] temp1,temp2;
char[] pr;
Node temp;
pr=new char[2];
pr[0]=' ';
if(Root==null) ;
else if(Root.getString().toCharArray()[0]!=NewString.ending &&Root.getString().toCharArray()[0]!='+'&&Root.getString().toCharArray()[0]!='-'&&Root.getString().toCharArray()[0]!='*'&&Root.getString().toCharArray()[0]!='/')
{
Root.setVisit(1);
temp1=Root.getString().toCharArray();
for(int i=0;i<link.length;i++)
{
temp2=link[i].getRoot().getString().toCharArray();
if(temp1[0]==temp2[0]) n=i;
}
temp=link[n].getRoot();
if(Root.getHead()!=0)
{
System.out.println();
System.out.println("选择一种推导方式:");
for(int i=0;i<temp.getString().length();i++)
System.out.println("1:左推导 2:右推导 ");
System.out.print("选择:");
try{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
string=in.readLine();
}catch(IOException e){}
pr=string.toCharArray();
}
if(Root.getLeft()!=null&&Root.getRight()!=null)
{
System.out.println();
System.out.println("选择一个推导的右部:");
for(int i=1;i<2;i++)
{
m=StringToInt(string);
System.out.print((i)+": "+temp.getIndexAdj(m).findAdj()[i].getString()+" ");//&&*^*%
}
}
if(Root.getLeft()==null||Root.getRight()==null)
{
System.out.println();
System.out.println("选择一个推导的右部:");
for(int i=1;i<temp.findAdj().length;i++)
{
m=StringToInt(string);
System.out.print((i)+": "+temp.findAdj()[i].getString()+" ");
}
}
try{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
string=in.readLine();
}catch(IOException e){}
m=StringToInt(string);
if(temp.getIndexAdj(m).getString().length()==2)
{
Node o=new Node(temp.getIndexAdj(m).getIndexAdj(1).getNString());
if(pr[0]=='1') Root.setChild(o,null,null);
else if(pr[0]=='2') Root.setChild(null,null,o);
else ;
number++;
}
else
{
Node o=new Node(temp.getIndexAdj(m).getIndexAdj(1).getNString());
Node o1=new Node(temp.getIndexAdj(m).getIndexAdj(2).getNString());
Node o2=new Node(temp.getIndexAdj(m).getIndexAdj(3).getNString());
Root.setChild(o,o1,o2);
number=number+3;
}
PrintTree(root);
Root.setHead(1);
if(pr[0]=='1')
{
while(Root.getVisit()!=0)
Root=Root.getLeft();
}
else if(pr[0]=='2')
{
while(Root.getVisit()!=0)
Root=Root.getRight();
}
else goRandom(Root,link);
}
}
public int StringToInt(String str)
{
char[] c;
c=str.toCharArray();
if(c[0]=='1') return 1;
if(c[0]=='2') return 2;
if(c[0]=='3') return 3;
if(c[0]=='4') return 4;
else return -1;
}
public String PrintTree(Node Root)
{
Node node;
node=Root;
String string;
String string1,string2,string3;
string1=" ";
string2=" ";
string3=" ";
if(node.getVisit()==0)
{
string=node.getString();
System.out.print(node.getString());
}
if(node.getLeft()!=null) string1=PrintTree(node.getLeft());
if(node.getMid()!=null) string2=PrintTree(node.getMid());
if(node.getRight()!=null) string3=PrintTree(node.getRight());
string1=string1.concat(string2);
string=string1.concat(string3);
return string;
}
public Node getRoot()
{
return root;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -