2013-07-21 62 views
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 
+3

你可能需要做一些空检查,以防子女为空。解除引用null将导致错误。这使我想起。你遇到了什么错误? – Borgleader

+0

非常感谢。这有帮助。我没有得到一个普通的编译错误。我使用Visual Studio 2010,当我运行该程序时,它崩溃并在代码行之前的代码中出现一个小小的黄色箭头。 –

回答

1

在某些时候,你会得到一个叶节点 - 当这种情况发生node将是NULL,你会尝试取消引用它(这不好)。

您应该添加支票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); 
} 

如果树的节点是独一无二的,它也可能是一个指针返回节点,而不是打印出来的东西是个好主意。