我想在二叉树中插入1到7个数字。然后使用Level-order-Traversal遍历树。 这是我用来插入节点的函数:
void InsertIntoBinaryTree(struct BinaryTree **root,int data)
{
struct BinaryTree *newNode,*tempNode;
struct Queue queue;
newNode = (struct BinaryTree *)malloc(sizeof(struct BinaryTree));
newNode -> data = data;
newNode -> left = newNode -> right = NULL;
if(!*root)
{
*root = newNode;
}
else
{
queue.rear = -1;
Enqueue(&queue,*root);
while(queue.front != -1)
{
tempNode = Dequeue(&queue);
if(tempNode -> left)
{
Enqueue(&queue,tempNode -> left);
}
else
{
tempNode -> left = newNode;
return;
}
if(tempNode -> right)
{
Enqueue(&queue,tempNode -> right);
}
else
{
tempNode -> right = newNode;
return;
}
}
}
}
root
节点已成功插入,但其他节点未成功插入。
插入root
节点后,我将新节点分配到root
节点的左侧,然后分配到root
的右侧。分配了新节点,但是一旦我遍历树,子节点就不显示,子节点没有被排队到我用来跟踪解析节点的临时队列。
以下是用于级别顺序遍历的函数:
void LevelOrderTraversal(struct BinaryTree *root)
{
struct Queue q;
struct BinaryTree *tempNode;
if(root)
{
q.rear = -1;
Enqueue(&q,root);
while(q.front != -1)
{
tempNode = Dequeue(&q);
printf("address:%u and data:%d\t",tempNode,tempNode -> data);
if(tempNode -> left)
Enqueue(&q,tempNode -> left);
if(tempNode -> right)
Enqueue(&q,tempNode -> right);
}
}
printf("\n");
}
请帮助弄清楚我哪里出错了。
修改:以下是Enqueue和Dequeue的代码:
void Enqueue(struct Queue *q,struct BinaryTree *root)
{
// check queue is full.................
if((q -> rear + 1)% MAX==q->front)
printf("queue is full");
else{
if((q -> rear == -1)||(q->front==-1))
q -> rear = q -> front = 0;
else
q -> rear = (q -> rear + 1)% MAX;
q -> a[q -> rear] = root;
}
}
struct BinaryTree *Dequeue(struct Queue *q)
{
struct BinaryTree *temp;
if(q->front==-1)
return NULL;
else{
temp = q -> a[q -> front];
if(q -> front == q -> rear)
q -> front = q -> front = -1;
else
q -> front = (q -> front + 1)% MAX;
return temp;
}
}