Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.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语言实现二叉树的旋转平衡_C_Binary Tree - Fatal编程技术网

用C语言实现二叉树的旋转平衡

用C语言实现二叉树的旋转平衡,c,binary-tree,C,Binary Tree,我有一个二叉树,数据来自一个简单的列表,现在我需要平衡它,但它一直给我错误分割错误 我的余额代码是: NodoAB * balance(NodoAB *A){ int D=0,E=0; if(A==NULL) return(NULL); if(fabs(countNodesAB(A->fe)-countNodesAB(A->fd))<=1) return (A); if(countNodesAB(A->fe)-countNodesAB(

我有一个二叉树,数据来自一个简单的列表,现在我需要平衡它,但它一直给我错误分割错误

我的余额代码是:

NodoAB * balance(NodoAB *A){
  int D=0,E=0;
  if(A==NULL)
    return(NULL);

  if(fabs(countNodesAB(A->fe)-countNodesAB(A->fd))<=1)
    return (A);

  if(countNodesAB(A->fe)-countNodesAB(A->fd)<=-2){
    D=countNodesAB(A->fd->fd);
    printf("D:%d\n",D);
    E=countNodesAB(A->fd->fe);
    printf("E:%d\n",E);
    if(E-D==1)
      return(rotationLeft(A));
    else{
      A=rotationRight(A);
      A->fd=rotationLeft(A->fd);
      return(A);
    }
  }
}
计数节点:

int countNodesAB(NodoAB *A){
  if(A==NULL)
    return 0;

  return(1+countNodesAB(A->fe)+countNodesAB(A->fd));
}

以下情况似乎可疑:

if(countNodesAB(A->fe)-countNodesAB(A->fd)<=2){
    D=countNodes(A->fd->fd);

如果->fe有2个节点,而->fd有0个节点,那么我认为这意味着->fd为空,然后导致showns countNodes上的访问冲突调用->fd->fd将无效。

请不要返回;!返回不是函数。@H2CO3。如果是的话,它就是结束所有函数的函数。@DanielFischer如果我感觉正确,我们在这里进入lambda演算…:P@H2CO3这也很好,但这是一个结束所有战争的双关语。@H2CO3,我完全同意返回语句中使用的值不应该包含在括号中,但是我会使用不同的理由,而不是它不是一个函数。sizeof和typeof都不是函数,但它们仍然经常与括号一起使用。我宁愿说这是一个风格的问题,在返回的情况下,风格指南倾向于说不要使用paren。然后我必须确保countNodesABA->fd=0?嗯。。。在取消引用指针之前,您需要确保A->fd不为NULL。我有一个疑问,我必须在树中插入节点时调用balance函数,对吗?从技术角度来看,可以随时平衡二叉树,当然要注意并发性问题。这将取决于应用要求。
if(countNodesAB(A->fe)-countNodesAB(A->fd)<=2){
    D=countNodes(A->fd->fd);