CSDN 博主:住在阳光的心里
4
if(p->rchild){
stack1[++top1] = p->rchild;
}
}
//此时循环结束,则会将逆后序遍历的结果都存放到了栈 2 中,对栈 2 进行输出即可得后序遍历结果
while(top2 != -1){
p = stack2[top2--];
printf("%c\n", p->data);
}
}
}
2、递归 (后序遍历)
void preorder(BiTNode *p){
if(p != nullptr){ //判空
preorder(p->lchild); //递归左子树
preorder(p->rchild); //递归右子树
printf("%c", p->data); //假设 TElemType data; 中 data 类型是 char
}
}
(五)层序遍历(队列,先进先出)
void level_process(BiTNode *p){
BiTNode *que[MaxSize]; BiTNode *q = nullptr;
int front = 0, rear = 0; //定义一个循环队列
if(p != nullptr){ //树 p 不为空
rear = (rear + 1) % MaxSize;
que[rear] = p; //根结点入队(入队,队尾指针加一)
while(front != rear){ //队列不为空
front = (front + 1) % MaxSize;
q = que[front]; //队头元素出队(出队,队头指针加一)
printf("%c\n", q->data);
if(q->lchild){ //如果左子树存在,则左子树根结点入队
rear = (rear + 1) % MaxSize;
que[rear] = q->lchild;
}
if(q->rchild){ //如果右子树存在,则右子树根结点入队
rear = (rear + 1) % MaxSize;
que[rear] = q->rchild;
}
}
}