繁体   English   中英

BST C ++中的指针帮助

[英]Pointer help in BST c++

我的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,读取的每个节点都将打印出其深度。 但是我这里的问题是,树根就像树的副本一样,它们是相同的,因此深度始终为1(从节点到根的距离加1)。 如何从初始树根声明树根,即使树发生变化也不会改变? 谢谢,对不起我的英语!

乍一看,您的代码看起来不错,除了没有理由让tree参数成为对指针的引用。 我的猜测是NodeDepth 建议您随行随进地跟踪级别,而不是重新计算。 然后,您的函数将对树进行深度优先扫描 ,如下所示:

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);
}

您可以通过使用root0作为参数调用ReadNLR来启动打印过程。

您还可以使用队列逐级打印树-如果您仍需要帮助,我会在不久后发布。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM