Iz E-študij, proste zakladnice študentskega znanja
//Drevo v predstavitvi levi sin, desni brat
public class TreeLSRS extends Tree {
private TreeLSRSnode rootNode ;
public TreeLSRS() {
makenull() ;
}
public TreeLSRS(TreeLSRS tree) {
copy(tree) ;
}
public void makenull() {
rootNode = null ;
}
public TreeNode root() {
return rootNode ;
}
public TreeNode leftmostChild(TreeNode n) {
return ((TreeLSRSnode)n).leftSon ;
}
public TreeNode rightSibling(TreeNode n) {
return ((TreeLSRSnode)n).rightSibling ;
}
public TreeNode parent(TreeNode n) {
return ((TreeLSRSnode)n).parent ;
}
public void create(Object v, ListLinked subTrees) {
TreeLSRS leftSon, child ;
Object iter = subTrees.first() ;
if (! subTrees.overEnd(iter)) {
leftSon = (TreeLSRS) subTrees.retrieve(iter);
rootNode = new TreeLSRSnode(v, null, null, leftSon.rootNode);
leftSon.rootNode.parent = rootNode;
leftSon.rootNode.rightSibling = null;
for (iter = subTrees.next(iter); !subTrees.overEnd(iter);
iter = subTrees.next(iter)) {
child = (TreeLSRS) subTrees.retrieve(iter);
leftSon.rootNode.rightSibling = child.rootNode;
child.rootNode.parent = rootNode;
child.rootNode.rightSibling = null;
}
}
else rootNode = new TreeLSRSnode(v, null, null, null) ;
}
private void copy(TreeLSRS tree) {
if (tree.rootNode == null)
rootNode = null ;
else {
rootNode = new TreeLSRSnode(tree.rootNode);
copy(rootNode, tree.rootNode) ;
}
}
private void copy(TreeLSRSnode myNode, TreeLSRSnode copyNode) {
if (copyNode.leftSon != null) {
myNode.leftSon = new TreeLSRSnode(copyNode.leftSon) ;
myNode.leftSon.parent = myNode ;
copy(myNode.leftSon,copyNode.leftSon) ;
TreeLSRSnode cTemp = copyNode.leftSon ;
TreeLSRSnode mTemp = myNode.leftSon ;
while (cTemp.rightSibling != null) {
mTemp.rightSibling = new TreeLSRSnode(cTemp.rightSibling) ;
mTemp.parent = myNode ;
copy(mTemp.rightSibling,cTemp.rightSibling) ;
mTemp = mTemp.rightSibling ;
cTemp = cTemp.rightSibling ;
}
}
}
public static void main(String[] args) {
TreeLSRS tree = new TreeLSRS();
System.out.println("Testing "+tree.getClass() );
ListLinked list = new ListLinked() ;
TreeLSRS t1 = new TreeLSRS(), t2=new TreeLSRS();
t1.create(new Integer(5), list);
t2.create(new Integer(7), list) ;
list.insert(t1);
list.insert(t2);
tree.create(new Integer(10), list);
t1.copy(tree) ;
t2.copy(tree);
tree.create(new Integer(20), list);
System.out.println("Preorder");
tree.preorder(tree.root()) ;
System.out.println("\nBy level");
tree.printByLevel();
}
}