tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
380
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Jul 2001
    Ort
    Bayern
    Beiträge
    969
    Hallo

    ich sitze jetzt schon, ohne Übertreibung, einige Stunden mit dem berühmten Brett vorm Kopf vor diesem Problem:
    Ausgangsknoten A in einer Baumklasse mit den Attributen next, data, child und sibling.
    Relevant ist hier nur sibling. Wie kann ich möglichst einfach dem Knoten A eine Kette von siblings anhängen? Wenns statisch wäre könnte ich ja schreiben
    A.sibling = new Node();
    A.sibling.sibling = new Node();
    Genau das kann ich aber nicht. Ein Denkanstoss reicht mir evtl schon. Danke.
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Wie wär's denn damit:

    Siblings sind "Geschwister" und um nicht "unnötig" Speicher zu verbrauchen sollte man sie über den Parent beziehen. Man könnte beispielsweise sagen:
    "Die Geschwister eines Knotes sind alle Kinder des Vaters dieses jeweiliegen Knotens ohne den Knoten selbst".

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    /*
     * Created on 22.01.2005@14:23:34
     *
     * TODO Licence info
     */
    package de.tutorials;
     
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
     
    class TreeNode {
        protected Object data;
     
        protected TreeNode parent;
     
        // ? auf "wen" soll next verweisen ?
        protected TreeNode next;
     
        // Kind elemente
        protected List<TreeNode> children;
     
        public TreeNode(TreeNode parent, Object data) {
            this.parent = parent;
            this.data = data;
            this.children = new ArrayList<TreeNode>();
        }
     
        //Geschwister-Elemente
        protected List<TreeNode> getSiblings() {
            if (parent == null)
                return Collections.EMPTY_LIST;
            List<TreeNode> list = new ArrayList<TreeNode>(parent.getSiblings());
            list.remove(this);
            return Collections.unmodifiableList(list);
        }
    }

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    
    /*
     * Created on 22.01.2005@14:03:19
     *
     * TODO Licence info
     */
    package de.tutorials;
     
    import java.util.Iterator;
     
    /**
     * @author Darimont
     * 
     * TODO Explain me
     */
    public class TreeExample {
     
        public static void main(String[] args) {
            new TreeExample().doIt();
        }
     
        private void doIt() {
            // TODO Auto-generated method stub
            TreeNode root = new TreeNode(null, "root");
            generateSomeChilds(root, 0);
     
            printTree(root);
        }
     
        /**
         * @param root
         */
        private void printTree(TreeNode node) {
            if (node.children != null && node.children.size() > 0) {
                for (Iterator<TreeNode> iter = node.children.iterator(); iter
                        .hasNext();) {
                    printTree(iter.next());
                }
            }
            System.out.println(node.data);
        }
     
        private void generateSomeChilds(TreeNode root, int level) {
            if (level >= 3)
                return;
            for (int i = 0; i < 4; i++) {
                TreeNode node = new TreeNode(root, "[" + root.data + "]" + "->data"
                        + i);
                root.children.add(node);
                generateSomeChilds(node, ++level);
            }
        }
    }

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    Registriert seit
    Jul 2001
    Ort
    Bayern
    Beiträge
    969
    Danke, aber das ist für die Sache schon Overkill . Ich habs jetzt so gemacht:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    private TreeNode createSiblings(TreeNode child, String replace) {
            
            TreeNode node = child;
            
            for (int i = 1; i < replace.length(); i++) {
                
                node.sibling = new TreeNode(replace.substring(i, i + 1), 
                        child.depth);
                node = buildTree(node.sibling);
            }
            return child;
        }
     

Ähnliche Themen

  1. Rekursive Dateisuche
    Von max26 im Forum PHP
    Antworten: 6
    Letzter Beitrag: 25.07.09, 23:58
  2. Rekursive Multiplikation
    Von FiselM im Forum Java
    Antworten: 16
    Letzter Beitrag: 05.01.08, 20:19
  3. rekursive Navigation
    Von Sebigf im Forum PHP
    Antworten: 2
    Letzter Beitrag: 03.03.06, 00:22
  4. Rekursive Datenbankabfrage?! :-/
    Von splat im Forum PHP
    Antworten: 0
    Letzter Beitrag: 02.02.05, 18:03
  5. rekursive funktion
    Von thespecialx im Forum Java
    Antworten: 1
    Letzter Beitrag: 08.12.04, 21:13