25. maj 2005 - 11:03Der er
12 kommentarer og 1 løsning
Hjælp til træer
Vi har fået nogle øvelser til følgende emne. Jeg ønsker blot en løsning til spørgsmålet så kan jeg selv løse resten af spørgsmålene har bare ingen erfaring med træer på nuværende tidspunkt andet end, at vi har fået denne kode udleveret. Har dog læst kapitlet, som omhandler dem.
Det er kun øvelser og ikke eksamensrelateret
Spørgsmålet
Det forventes at der udvides med en levelOrder traversering i Iteratoren. Denne illustreres anvendt ved en udskrift af eksempeltræet. Udkriften behøves ikke foregå i GUI/SWING men kan sagtens være konsolbaseret. LevelOrder tilføjes i IteratorKlassen.
Iterator koden er
package mypackage;
public class TreeIterator implements java.util.Iterator { private BinaryTreeBasis binTree; private TreeNode currentNode; private QueueInterface queue; // from Chapter 7
public TreeIterator(BinaryTreeBasis bTree) { binTree = bTree; currentNode = null; // empty queue indicates no traversal type currently // selected or end of current traversal has been reached queue = new QueueReferenceBased(); } // end constructor
public boolean hasNext() { return !queue.isEmpty(); } // end hasNext
public Object next() throws java.util.NoSuchElementException { try { currentNode = (TreeNode)queue.dequeue(); return currentNode.getItem(); } // end try catch (QueueException e) { throw new java.util.NoSuchElementException(); } // end catch } // end next
public void remove() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } // end remove
public void setPreorder() { queue.dequeueAll(); preorder(binTree.root); } // setPreOrder
public void setInorder() { queue.dequeueAll(); inorder(binTree.root); } // end setInorder
public void setPostorder() { queue.dequeueAll(); postorder(binTree.root); } // end setPostorder
private void preorder(TreeNode treeNode) { if (treeNode != null) { queue.enqueue(treeNode); preorder(treeNode.getLeft()); preorder(treeNode.getRight()); } // end if } // end preorder
private void inorder(TreeNode treeNode) { if (treeNode != null) { inorder(treeNode.getLeft()); queue.enqueue(treeNode); inorder(treeNode.getRight()); } // end if } // end inorder
private void postorder(TreeNode treeNode) { if (treeNode != null) { postorder(treeNode.getLeft()); postorder(treeNode.getRight()); queue.enqueue(treeNode); } // end if } // end postorder } // end TreeIterator
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Du skal bruge en rekursion der udskriver "alle n levels under mig" eller "mig hvis n==0".
dun rekursion må også meget gerne returnere "er der et level endnu længere nede" som boolean.
så det bliver 2 funktioner: en rekursiv til at skrive eet enkelt level public boolean skrivLevel( int LevelUnder ) { if ( LevelUnder == 0 ) { // skriv denne return ( this.rightNode != null || this.leftNode != null ); } else { boolean tempResultat = false if ( this.rightNode != null ) { tempResultat = tempResultat || this.rightNode.skrivLevel(LevelUnder-1); } if ( this.leftNode != null ) { tempResultat = tempResultat || this.leftNode.skrivLevel(LevelUnder-1); } return tempResultat; } } //endmethod
en iterativ til at vælge levels der skal skrives, fra 0 til yderste blad public void skrivAlleLevels() { // nb: iterativ og ikke rekursiv int i = 0; while ( this.skrivLevel( i ) ) { i++; } } //endmethod.
det skal være if ( this.rightNode != null ) { tempResultat = this.rightNode.skrivLevel(LevelUnder-1) || tempResultat; // operander ombyttet så vi er sikre på skrivLevel bliver kaldt } if ( this.leftNode != null ) { tempResultat = this.leftNode.skrivLevel(LevelUnder-1) || tempResultat; // operander ombyttet så vi er sikre på skrivLevel bliver kaldt }
public class TreeNode { private Object item; private TreeNode leftChild; private TreeNode rightChild;
public TreeNode(Object newItem) { // Initializes tree node with item and no children. item = newItem; leftChild = null; rightChild = null; } // end constructor
public TreeNode(Object newItem, TreeNode left, TreeNode right) { // Initializes tree node with item and // the left and right children references. item = newItem; leftChild = left; rightChild = right; } // end constructor
public Object getItem() { // Returns the item field. return item; } // end getItem
public void setItem(Object newItem) { // Sets the item field to the new value newItem. item = newItem; } // end setItem
public TreeNode getLeft() { // Returns the reference to the left child. return leftChild; } // end getLeft
public void setLeft(TreeNode left) { // Sets the left child reference to left. leftChild = left; } // end setLeft
public TreeNode getRight() { // Returns the reference to the right child. return rightChild; } // end getRight
public void setRight(TreeNode right) { // Sets the right child reference to right. rightChild = right; } // end setRight
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.