递归查找节点功能

时间:2014-08-15 04:52:47

标签: c++ recursion tree

我有一个函数,它递归搜索一般树(不是BST)来查找特定节点,但它无法正常工作。每个节点都有一个指向节点(子节点)的指针数组,默认情况下每个节点设置为3个子节点。我知道这不是最好的方法,但它是作业的一部分。该函数由insert函数调用。 insert函数以父对象的名义传递,然后find函数找到该父对象的Node并返回它;然后,insert函数将新子项插入该父项。

它似乎在大多数情况下都有效,但对于其中一个新子节点,find函数返回了错误的节点。我走过调试器,它找到了匹配的父名称并返回它应该如此但是当它一直返回到插入函数(它被调用的地方)时它指向一个不同的节点(不是它最初发现的那个是匹配的)

//Finds the name of the parent that is passed in and inserts a new node as a child of      that parent
void Tree::Tree(char* name,char* desc,int level,char* parentName)
{
    //find the parent
    Node* location = FindLoc(parentName, root);

    //the parent was found
    if(location)
    {
        int index = 0;

        while(location->child[index] && (index + 1) < child_max)
            ++index;

        if(!location->child[index])
        {
            location->child[index] = new Node();
            location = location->child[index];
            location->data.SetName(name);
            location->data.SetDesc(desc);
            location->data.SetLevel(level);
        }
    }

    else
        cout<< "Parent not found!"<<endl;
}


//Finds the parent of the new child to be added to the tree
Tree::Node* Tree::FindLoc(char* parentName, Node* root)
{
    Node* temp = NULL;
    if(root)
    {
        if(strcmp(parentName, root->data.GetName()) == 0)
            return root;
        else
        {
            for(int i = 0; i < child_max && root->child[i]; ++i)
                temp = FindLoc(parentName, root->child[i]);

            if(temp) return temp;
        }
    }

    else return temp;
}

1 个答案:

答案 0 :(得分:0)

尝试将for循环更改为:

for(int i = 0; i < child_max; ++i)
    if(root->child[i])
    {
        temp = FindLoc(parentName, root->child[i]);
        if(temp) return temp;
    }