Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ AVL平衡查找何时进行平衡_C++_Avl Tree - Fatal编程技术网

C++ 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

我正在尝试创建一个AVL树,但在查找树的不平衡位置时遇到了问题。我在这个函数中遇到了一个分段错误

    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树意味着什么呢?不管是什么,您必须显式地编写这种情况。这可能会很乏味。