0

我有一个非常严重的问题。我有一棵二叉树,我想在找到一个精确节点的同时穿过这棵树。我有这个代码:

template<class T>
void Tree<T>::CheckTwoTimes(Node<T> *node, Node<T> *original)
{
    if(node == original) cout << "This is it" << endl;
    CheckTwoTimes(node->Left, original); //It gives error here
    CheckTwoTimes(node->Right, original);//And maybe it will give it here
}

original是我正在搜索的节点。但是当我运行程序时它只是崩溃并告诉我哪一行是问题所在。我不知道怎么了。也许我没有像应该的那样传递指针参数。

我这样调用函数:

CheckTwoTimes(root, find); //**find** is for example the most left node
4

1 回答 1

1

在某些时候,您将到达一个叶节点 - 当这种情况发生时nodeNULL您将尝试取消引用它(这不好)。

您应该添加一个检查NULL

template<class T>
void Tree<T>::CheckTwoTimes(Node<T> *node, Node<T> *original)
{
    if (node == NULL)
        return;
    if (node == original)
        cout << "This is it" << endl;
    CheckTwoTimes(node->Left, original);
    CheckTwoTimes(node->Right, original);
}

如果树中的节点是唯一的,那么返回一个指向该节点的指针而不是打印一些东西可能也是一个好主意。

于 2013-11-08T09:13:09.137 回答