alt text şeklinde bir ağaç yapım var. Örneğin topNode um Node 11 olsun. Bu topNode'a göre:

[ [Node7, Node13, Node14, Node16], [Node23, Node9, Node5, Node25, Node24], [Node1, Node15] ]

şeklinde bir array nasıl alabilirim? Yani topNode'dan sonra gelen node'ları level level almak istiyorum.

Not: Her node'un child nodelarına #child_nodes ve parent node'una #parent_node ile erişebiliyorum.

soruldu: 27 Haz '12, 10:39

cpaksoy's gravatar image

cpaksoy
6113
cevap kabul oranı: 0%

değiştirildi: 28 Haz '12, 07:38

CemIkta's gravatar image

CemIkta ♦
19.9k29125190

Hangi dil/framework ile yaptiginizi yazarsaniz daha kolay cevaplar alabilirsiniz!

(28 Haz '12, 04:55) CemIkta ♦ CemIkta's gravatar image

Ruby/Rails. Ama herhangi bir dil ile verilen cevaplar işimi görür.

(28 Haz '12, 06:54) cpaksoy cpaksoy's gravatar image

sorunuzu anlamadım, sisteme node11'i verince 7,13,14,16 şeklinde bir yanıt mı istiyorsunuz, input olarak ne vereceğiniz ve output'unda ne beklediğinizi bir kaç örnek node ile örneklendirebilirseniz belki daha net yardımcı olunabilir, algoritmik bir probleme yanıt arıyorsunuz anladığım kadarı ile.

(28 Haz '12, 09:35) nht nht's gravatar image

Örnek Node 29 için: [[Node22], [Node17, Node19]], Diğer örnek Node 6 için: [[Node30],[Node10]], Diğer örnek Node 14 için: [[Node5, Node25][Node1]]

(28 Haz '12, 11:18) cpaksoy cpaksoy's gravatar image

selam, ancak vakit bulabildim, ufak bir implementasyon yazdım, umarım fikir vermesi açısından faydası olur

package treestructure;

import java.util.ArrayList;
import java.util.List;
public final class Node<T>
{
    private T _nodeValue;
    private List<Node<T>> _childNodes;

    public Node(T nodeValue, Node<T> []childNodes)
    {
        _nodeValue = nodeValue;
        _childNodes = new ArrayList<Node<T>>();

        if(childNodes != null)
            for(Node<T> node : childNodes)
                _childNodes.add(node);
    }

    public List<Node<T>> getChildNodes()
    {
        return _childNodes;
    }

    public T getNodeValue()
    {
        return _nodeValue;
    }

    public void addChildNode(Node<T> childNode)
    {
        _childNodes.add(childNode);
    }

    public Node<T> getNode(T nodeValue)
    {
        for(Node<T> node : _childNodes)
            if(node._nodeValue.equals(nodeValue))
                return node;
        return null;
    }

    @Override
    public String toString() 
    {
        return _nodeValue+"";
    }
}

bu da asıl işi yapan kod :

package treestructure;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public final class TreeStructureTest 
{   
    private Node<Integer> nodeRoot;

    public TreeStructureTest()
    {       
    }

    public void buildTree()
    {       
        nodeRoot = new Node<Integer>(11, null);
        nodeRoot.addChildNode(new Node<Integer>(7,null));
        nodeRoot.addChildNode(new Node<Integer>(13,null));
        nodeRoot.addChildNode(new Node<Integer>(14,null));
        nodeRoot.addChildNode(new Node<Integer>(16,null));

        nodeRoot.getNode(7).addChildNode(new Node<Integer>(23,null));
        nodeRoot.getNode(13).addChildNode(new Node<Integer>(9,null));
        nodeRoot.getNode(14).addChildNode(new Node<Integer>(5,null));
        nodeRoot.getNode(14).addChildNode(new Node<Integer>(25,null));
        nodeRoot.getNode(16).addChildNode(new Node<Integer>(24,null));

        nodeRoot.getNode(14).getNode(5).addChildNode(new Node<Integer>(1,null));
        nodeRoot.getNode(16).getNode(24).addChildNode(new Node<Integer>(15,null));
    }

    public Node<Integer> getRootNode()
    {
        return nodeRoot;
    }

    public void getNodesOrderByLevel(List<Node<Integer>> levelNodes, int levelId, List<Node<Integer>[]> resList)
    {
        if(levelNodes.size() == 0)
            return;

        int k = 0;
        Node<Integer> []levelRes = new Node[levelNodes.size()];
        for(Node<Integer> node : levelNodes)
            levelRes[k++] = node;

        resList.add(levelId, levelRes);

        levelId++;

        List<Node<Integer>> tmpList = new ArrayList<Node<Integer>>();
        for(Node<Integer> node : levelNodes)
        {
            for(Node<Integer> tmpNode : node.getChildNodes())
                tmpList.add(tmpNode);
        }

        levelNodes.clear();
        for(Node<Integer> node : tmpList)
            levelNodes.add(node);

        getNodesOrderByLevel(levelNodes, levelId, resList);
    }

    public static void main(String[] args) 
    {
        TreeStructureTest tst = new TreeStructureTest();
        tst.buildTree();

        List<Node<Integer>> levelNodes = new ArrayList<Node<Integer>>();
        levelNodes.add(tst.getRootNode());
        int levelId = 0;
        List<Node<Integer>[]> resList = new ArrayList<Node<Integer>[]>();

        tst.getNodesOrderByLevel(levelNodes, levelId, resList);

        for(Node<Integer>[] nodeArray : resList)
            System.out.println(Arrays.toString(nodeArray));
    }
}

Bu da programın çıktısı :

[11]
[7, 13, 14, 16]
[23, 9, 5, 25, 24]
[1, 15]
permanent link

cevaplandı: 29 Haz '12, 03:27

nht's gravatar image

nht
95651720
cevap kabul oranı: 33%

Hocam çok teşekkür ederim. Java bilmediğim için bunu çözümlemek biraz vaktimi alacak. Ama çözümleyip Ruby'ye çevirip tekrar buraya yazacağım.

(29 Haz '12, 05:21) cpaksoy cpaksoy's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×137
×6
×2

Soruldu: 27 Haz '12, 10:39

Görüntüleme: 1,002 kez

Son güncelleme: 29 Haz '12, 05:21

powered by BitNami OSQA