二叉树的复制

#include <bits/stdc++.h>
using namespace std;
typedef struct node {
    char data;
    struct node *lchild;
    struct node *rchild;
} Node, *Bitree;
char ch;
Bitree T;
Bitree rootb, root;
Bitree CreateBitree() {
    cin >> ch;
    Bitree T;
    if(ch == '#') T = NULL;
    //注意:二叉树的输入需要严格遵守以#结尾的规则,并且输入顺序按照前序遍历的方式
    else {
        T = new node;
        T->data = ch;
        T->lchild = CreateBitree();
        T->rchild = CreateBitree();
    }
    return T;
}


void PreOrder(Bitree T) {//前序遍历

    if(T) {
        cout << T->data << " ";
        PreOrder(T->lchild);
        PreOrder(T->rchild);
    }
}

void CopyBiTree(Bitree T, Bitree &rootb)
//复制二叉树
{
    if(T == NULL) {
        rootb = NULL;
        return ;
    } else {
        rootb = new node;
        rootb->data = T->data;
        CopyBiTree(T->lchild, rootb->lchild);
        CopyBiTree(T->rchild, rootb->rchild);
    }
}
int main() {
    root = CreateBitree();
    cout << "原二叉树的前序遍历为 ";
    PreOrder(root);
    CopyBiTree(root, rootb);
    cout << endl << "新二叉树的前序遍历为 ";
    PreOrder(rootb);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/yiqzq/article/details/80271838