【发布时间】:2021-12-14 04:14:19
【问题描述】:
我需要打印出所有带有叶子的父节点(叶子没有子节点并且高度为 0)作为它们的子节点之一。我让它遍历第一面并用一片叶子返回第一个父级,但是在返回之后,我不确定该怎么做,因为我尝试从右侧向下走,现在我得到一个段错误,我想如果它遍历一个节点的两侧然后它最终会回到那个节点并卡住。
我有什么:
void BST::printLeafParent(Tnode* cur){
if(getHeight(cur->right)== 0) {
cout << cur->key;
if(getHeight(cur->left) ==0)
return;
else{
printLeafParent(cur->left);
}
}
printLeafParent(cur->right);
if(getHeight(cur->left) == 0){
cout << cur->key;
return;
}
else{
printLeafParent(cur->left);
}
}
void BST::printLeafParent(){
if(getHeight(root->right)== 0) {
cout << root->key;
if(getHeight(root->left) ==0)
return;
else
printLeafParent(root->left);
}
printLeafParent(root->right);
if(getHeight(root->left) == 0){
cout << root->key;
return;
}
else{
printLeafParent(root->left);
}
}
我觉得我只是错过了一些简单的东西,但我很难理解/找到它。
【问题讨论】:
-
我没有看到任何针对 NULL 指针的测试。您应该使用调试器并在发生段错误后检查调用堆栈。这将通知您是否有 NULL 指针访问权限或其他情况(例如堆栈溢出)。
-
“我现在得到一个段错误” -- 在哪一行?那时你的变量的值是多少? (调试器使这部分调试更容易。)如果您使用更简单的输入,也许会更容易调试,也许是您当前示例的以
he为根的子树?