复制一棵二叉树的非递归算法

来源:互联网 发布:centos 6.5 squid 编辑:程序博客网 时间:2024/04/30 01:44

二叉链表类型定义:

typedef char TElemType;   // 设二叉树的元素为char类型typedef struct BiTNode {    TElemType data;    BiTNode  *lchild, *rchild;} BiTNode, *BiTree;
可用队列类型Queue的相关定义:

typedef BiTree QElemType; // 设队列元素为二叉树的指针类型Status InitQueue(Queue &Q);Status EnQueue(Queue &Q, QElemType e);Status DeQueue(Queue &Q, QElemType &e);Status GetHead(Queue Q, QElemType &e);Status QueueEmpty(Queue Q);
实现函数如下:

void CopyBiTree(BiTree T, BiTree &TT)/* 基于层次遍历的非递归复制二叉链表 */{    BiTree p1,p2;    Queue Q1,Q2;    if(!T){        TT = NULL;        return ;    }    TT = (BiTree)malloc(sizeof(BiTNode));    InitQueue(Q1);    InitQueue(Q2);    EnQueue(Q1,T);    EnQueue(Q2,TT);    while(!QueueEmpty(Q1)){        DeQueue(Q1,p1);        DeQueue(Q2,p2);        p2 -> data = p1 -> data;        if(p1 ->lchild){//复制左子树            EnQueue(Q1,p1 -> lchild);            p2 -> lchild = (BiTree)malloc(sizeof(BiTNode));            if(!p2 -> lchild){                exit(OVERFLOW);            }            EnQueue(Q2,p2 -> lchild);        }        if(p1 ->rchild){//复制右子树            EnQueue(Q1,p1 -> rchild);            p2 -> rchild = (BiTree)malloc(sizeof(BiTNode));            if(!p2 -> rchild){                exit(OVERFLOW);            }            EnQueue(Q2,p2 -> rchild);        }    }}


1 0