BST c ++中的指针帮助

时间:2012-12-04 14:21:32

标签: c++ pointers binary-search-tree

我的BST有一个名为pTree的根。它由以下声明:

KnightTree* tree;

现在我需要编写一个带有指向根的新指针的函数(在本例中为“树”),如果我使用pTree = pTree-> pLeftChild,则永远不会更改事件。或pTree = pTree-> pRightChild; 在我调用下面的函数之前,我声明:

KnightTree* treeroot=tree;

然后我调用函数:

ReadNLR(tree,treeroot);

功能如下:

void ReadNLR(KnightTree*&tree,KnightTree* treeroot)
{
    if(tree !=NULL)
    {
        cout<<tree->key<<" is at the depth of "<<NodeDepth(treeroot,tree)<<endl;
        cout<<treeroot->key<<endl;
        ReadNLR(tree->pLeftChild,treeroot);
        ReadNLR(tree->pRightChild,treeroot);
    }
}

我的想法是进行NLR读取,每个读取的节点都会打印出它的深度。但我在这里遇到的问题是treeroot就像树的副本一样,它们是相同的,因此深度总是1(从节点到根的距离加1)。如何从初始树根声明treeroot,即使树更改也永远不会改变?谢谢你,对不起我的英文!

1 个答案:

答案 0 :(得分:0)

乍一看,您的代码看起来很好,除了没有理由让树参数成为对指针的引用。我的猜测是NodeDepth出了问题。建议只是跟踪你的水平,而不是重新计算它。你的函数,它执行树的depth-first sweep,看起来像这样:

void ReadNLR(KnightTree* tree, int level)
{
    if (tree == NULL)
        return;

    cout << tree->key << " is at the depth of " << level;
    ReadNLR(tree->pLeftChild, level + 1);
    ReadNLR(tree->pRightChild, level + 1);
}

您可以使用ReadNLRroot作为参数调用0来开始打印过程。

您还可以使用队列逐级打印树级别 - 如果您仍需要帮助,我会尽快发布。