二叉树的镜像的非递归实现,代码如下:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<stack>
//二叉树结点
typedef struct BiTNode{
//数据
char data;
//左右孩子指针
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//按先序序列创建二叉树,递归
int CreateBiTree(BiTree &T){
char data;
//按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树
scanf("%c",&data);
if(data == '#'){
T = NULL;
}
else{
T = (BiTree)malloc(sizeof(BiTNode));
//生成根结点
T->data = data;
//构造左子树
CreateBiTree(T->lchild);
//构造右子树
CreateBiTree(T->rchild);
}
return 0;
}
//树的镜像
void TreeMirror(BiTree T){
stack<BiTree> stack;
//p是遍历指针
BiTree p = T;
BiTree temp;
//栈不空或者p不空时循环
while(p || !stack.empty()){
if(p != NULL){
//存入栈中
stack.push(p);
temp=p->lchild;
p->lchild=p->rchild;
p->rchild=temp;
//遍历左子树
p = p->lchild;
}
else{
//退栈
p = stack.top();
stack.pop();
//访问右子树
p = p->rchild;
}
}//while
}
int main()
{
BiTree T;
CreateBiTree(T);
printf("树的镜像:\n");
TreeMirror(T);
printf("\n");
return 0;
}