您的位置:首页 > 其它

非递归队列方法建立二叉树

2012-10-13 22:03 246 查看
非递归队列方法建立层次二叉树

思想:要认清rear和front的关系

1:函数刚开始rear== 0是要在while中第一次起作用,rear == front 表示栈空.

2:看函数体,当rear在自增后卫奇数时,此时q[front]的右孩子已经处理完,跟紧其后的是front++,

表明下一个处理的节点为当前处理节点的兄弟节点或者堂兄弟节点,反正就是往右的下一个节点.

3:算法用到了数组指针,每个元素存放已输入节点的地址,其中rear和front的关系为front + 2 = rear

4:因为队列的性质,所以从函数课已看出来[front]为当前急需出对的节点,[rear]为当前继续出队节点的左孩子或右孩子

bitree *q[MAX];

bitree *creat()

{

int x;

int front,rear;

bitree *root,*s;

root = NULL;

s = NULL;

front = 1;

rear = 0;

printf("\n\t\t请输入,结束输入-99,叶节点输入0:");

scanf("%d",&x);

while(x != -99)

{

if(x != 0)

{

{

s = new bitree;

s->data = x;

s->lchild = NULL;

s->rchild = NULL;

}

rear = rear + 1;

q[rear] = s;

if(rear == 1)

root = s;

else

{

if(s && q[front])

{

//因为数组指针总存放的规律的节点地址,所以front一次处理就行了

if(rear % 2 == 0)

{

q[front]->lchild = s;

}

else

{

q[front]->rchild = s;

}

}

if(rear%2 == 1)front = front + 1;

}

}

printf("\n\t\t请输入,结束输入-99,叶节点输入0:");

scanf("%d",&x);

}

return root;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: