C++ AVL平衡查找何时进行平衡
我正在尝试创建一个AVL树,但在查找树的不平衡位置时遇到了问题。我在这个函数中遇到了一个分段错误C++ AVL平衡查找何时进行平衡,c++,avl-tree,C++,Avl Tree,我正在尝试创建一个AVL树,但在查找树的不平衡位置时遇到了问题。我在这个函数中遇到了一个分段错误 void AVL::findInbalance(Node* start) { cout << "findInbalance " << start->data << endl; int diff; if(start->rightChild == nullptr && start->leftChild == nul
void AVL::findInbalance(Node* start) {
cout << "findInbalance " << start->data << endl;
int diff;
if(start->rightChild == nullptr && start->leftChild == nullptr) {
diff = 0;
}
else {
diff = start->rightChild->getHeight() - start->leftChild->getHeight();
}
if(diff > 1 && start->rightChild->rightChild->getHeight() >= start->rightChild->leftChild->getHeight()){
cout << "left rotation" << endl;
rotation(start, 0);
}
if(diff < -1 && start->leftChild->leftChild->getHeight() >= start->leftChild->rightChild->getHeight()){
cout << "right rotation" << endl;
rotation(start, 1);
}
if(diff < -1 && start->leftChild->leftChild->getHeight() < start->leftChild->rightChild->getHeight()) {
cout << "left right rotation" << endl;
rotation(start->leftChild, 0);
rotation(start, 1);
}
if(diff > 1 && start->rightChild->rightChild->getHeight() < start->rightChild->leftChild->getHeight()) {
cout << "right left rotation" << endl;
rotation(start->rightChild, 1);
rotation(start, 0);
}
if(start->parent != nullptr){
findInbalance(start->parent);
}
else {
cout << "balance complete" << endl;
return;
}
}
void AVL::findInbalance(节点*开始){
cout leftChild==nullptr){
差异=0;
}
否则{
diff=start->rightChild->getHeight()-start->leftChild->getHeight();
}
如果(diff>1&&start->rightChild->rightChild->getHeight()>=start->rightChild->leftChild->getHeight()){
cout leftChild->getHeight()>=start->leftChild->rightChild->getHeight()){
cout leftChild->getHeight()leftChild->rightChild->getHeight()){
cout 1&&start->rightChild->rightChild->getHeight()rightChild->leftChild->getHeight()){
cout parent!=nullptr){
findInbalance(开始->父项);
}
否则{
我的AVL树知识可能有点生疏,但如果其中一个(但不是两个)出现,这段代码肯定会崩溃start->leftChild
和start->rightChild
中的一个是nullptr
。是的,确实发生了这种情况,但我该如何解决它?欢迎使用。从您提供的不完整代码中,无法找出代码的确切问题。错误可能是按代码的顺序排列的。请重试通过调试器检查您的代码。您应该确定代码中有问题的部分,并查看是否可以通过在Internet上搜索来解决错误。如果不能,则提取有问题的代码并制作一个示例(可以直接提供给编译器并演示问题)为了演示它。请确保解决一个特定的问题,并发布重现该问题所需的最少代码。@benharden正如我所说,我的AVL知识有点生疏,那么当一边为nullptr时,平衡AVL树意味着什么呢?不管是什么,你必须显式地编写这种情况。这可能很乏味。我的AVL树知道ledge有点生锈,但如果其中一个(但不是两个)崩溃,此代码肯定会崩溃start->leftChild
和start->rightChild
中的一个是nullptr
。是的,确实发生了这种情况,但我该如何解决它?欢迎使用。从您提供的不完整代码中,无法找出代码的确切问题。错误可能是按代码的顺序排列的。请重试通过调试器检查您的代码。您应该确定代码中有问题的部分,并查看是否可以通过在Internet上搜索来解决错误。如果不能,则提取有问题的代码并制作一个示例(可以直接提供给编译器并演示问题)为了演示它。请确保解决一个特定的问题,并发布重现该问题所需的最少代码。@benharden正如我所说,我的AVL知识有点生疏,那么当一侧为nullptr时,平衡AVL树意味着什么呢?不管是什么,您必须显式地编写这种情况。这可能会很乏味。