如何在n-ary树中获取元素

时间:2013-12-23 00:54:32

标签: c++ recursion tree

我陷入了关于n-ary树的问题。我想得到一个元素的指针,给定根指针和元素的名称。我试图递归地写它,但我得到了分段错误。

Node* findNode(Node* ptr, const string& name)
{   
    if(ptr->getNextSibling() == NULL)
        return NULL;
    if(ptr->getFirstChild() == NULL)
       return NULL;

    if(ptr->getName() == name)

            return ptr;     
    else
    {
        findNode(ptr->getNextSibling(), name);
        findNode(ptr->getFirstChild(), name);   
    }   

}

n-ary树由指向下一个子节点的指针,指向下一个siblinng的指针,指向根节点和数据的指针组成。

2 个答案:

答案 0 :(得分:2)

基本二进制搜索看起来有点像这样:

Node* findNode(Node* ptr, const string& name)
{   
    if(ptr == NULL)
        return NULL;

    if(ptr->getName() == name)
        return ptr;     

    Node *pTarget = findNode(ptr->getLeftChild(), name);
    if (pTarget == NULL)
        pTarget = findNode(ptr->getRightChild(), name);   

    return pTarget;  // might be NULL
}

n-ary搜索可能看起来更像这样:

Node* findNode(Node* ptr, const string& name)
{   
    if(ptr == NULL)
        return NULL;

    if(ptr->getName() == name)
            return ptr;   

    for (Node *pChild=ptr->getFirstChild(); 
         pChild!=NULL; 
         pChild=pChild->getNextSibling())
    {
        Node *pTarget = findNode(pChild, name);
        if (pTarget != NULL)
            return pTarget;
    }

    return NULL;  
}

我没有编译或测试过这个,但我认为算法没问题(虽然次优)。

答案 1 :(得分:0)

在n-ary树中查找元素将是这样的。

body{
margin: auto;
    width: 50%;
}