C 如何在每个节点上生长该四叉树

C 如何在每个节点上生长该四叉树,c,traversal,quadtree,C,Traversal,Quadtree,我已经做了一个四叉树,它最初是一个统一的二级四叉树 struct qnode { int level; double xy[2]; struct qnode *child[4]; }; typedef struct qnode Node; int main( int argc, char **argv ) { Node *head; // make the head node head = makeNode( 0.0,0.0, 0 ); // make a t

我已经做了一个四叉树,它最初是一个统一的二级四叉树

struct qnode {
  int level;
  double xy[2];
  struct qnode *child[4];
};
typedef struct qnode Node;

int main( int argc, char **argv ) {

  Node *head;

  // make the head node
  head = makeNode( 0.0,0.0, 0 );

  // make a tree

  //full level 2 tree
  makeChildren( head );
  makeChildren( head->child[0] );
  makeChildren( head->child[1] );
  makeChildren( head->child[2] );
  makeChildren( head->child[3] );
}
//在给定位置(x,y)和标高处创建节点

Node *makeNode( double x, double y, int level ) {

  int i;

  Node *node = (Node *)malloc(sizeof(Node));

  node->level = level;

  node->xy[0] = x;
  node->xy[1] = y;

  for( i=0;i<4;++i )
    node->child[i] = NULL;

  return node;
}

如何遍历每个节点并在每个节点上均匀地生长树?

递归方法似乎是正确的。大概是这样的:

void growTree(Node * root) {
    for(int i=0; i<4; i++) {
        if(root->child[i] == NULL) root->child[i] = makeNode(0,0,root->level+1);
        else growTree(root->child[i]);
    }
}
Node *makeNode(double x, double y, Node * node) {
    int level = node->level;
    // copy old body of makeNode here
}
另外,更改为:

typedef struct Node {
  int level;
  double xy[2];
  struct Node *child[4];
} Node;
没有理由对结构节点和节点使用不同的名称。如果要隐藏结构节点的定义,请使用以下命令:

struct Node {
  int level;
  double xy[2];
  struct Node *child[4];
};

typedef struct Node Node;

什么是
节点
。请读这个:顺便说一句,它仍然不是一个(你读了那个链接吗?),更好地解释你想做什么。你想让每片叶子都长到4个孩子吗?
struct Node {
  int level;
  double xy[2];
  struct Node *child[4];
};

typedef struct Node Node;