在二叉树中插入节点

时间:2015-11-26 06:33:32

标签: c algorithm tree queue

我想在二叉树中插入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;
     }
}

0 个答案:

没有答案