我陷入了关于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的指针,指向根节点和数据的指针组成。
答案 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%;
}