TreeLSRS.java

Iz E-študij, proste zakladnice študentskega znanja

Skoči na: navigacija, iskanje
//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();
  }
}
Osebna orodja
Imenski prostori
Različice
Dejanja
navigacija

Tiskanje/izvoz
orodja