二叉树的复制

来源:互联网 发布:抗衰老精华 知乎 编辑:程序博客网 时间:2024/05/19 12:25

复制二叉树

在二叉树的使用上常常需要备份原来的二叉树。如何复制直接看代码


这里写图片描述

/*********************************************************-  Copyright (C): 2016-  File name    : copytree.c-  Author       : - Zhaoxinan --  Date         : 2016年08月05日 星期五 19时15分45秒-  Description  : 使用递归的方式创建二叉树,然后备份原来的                  二叉树,最后将原来的二叉树和复制的二叉树          都打印出来*  *******************************************************/#include <stdio.h>#include <stdlib.h>struct tree{    int data;    struct tree *left;    struct tree *right;};typedef struct tree treenode;typedef treenode* btree;/*      递归创建二叉树 */btree createtree(int *data, int pos){    btree newnode;    //递归终止条件    if (data[pos] == 0 || pos > 15)    {        return NULL;    }    else    {        //给新节点分配内存        newnode = (btree)malloc(sizeof(treenode));        //创建新节点内容        newnode->data = data[pos];        //创建左子树的递归调用        newnode->left = createtree(data, 2*pos);        //创建右子树的递归调用        newnode->right = createtree(data, 2*pos+1);        return newnode;    }}/*      二叉树的复制 */btree copybtree(btree root){    btree newnode;    if (root == NULL)    {    return NULL;    }    else    {        //创建新节点        newnode = (btree)malloc(sizeof(treenode));        //复制节点内容        newnode->data = root->data;        //复制左子树        newnode->left = copybtree(root->left);        //复制右子树        newnode->right = copybtree(root->right);        //以上两行代码先创建左子树再创建右子树,如果顺序颠倒其创建的顺序就会颠倒,但是最终创建的二叉树还是一样的        return newnode;    }}/*  二叉树的前序遍历输出 */void preolder(btree ptr){    if (ptr)    {        printf("%2d", ptr->data);        preolder(ptr->left);        preolder(ptr->right);    }}/* 二叉树的中序遍历输出 */void inolder(btree ptr){    if (ptr)    {        inolder(ptr->left);        printf("%2d", ptr->data);        inolder(ptr->right);    }}/* 二叉树的后序遍历输出 */void postolder(btree ptr){    if (ptr)    {        postolder(ptr->left);        postolder(ptr->right);        printf("%2d", ptr->data);    }}int main(){    btree root = NULL;  //原始二叉树树根    btree temp = NULL;  //复制二叉树树根    int data[16] = {0,5,4,6,2,0,0,8,1,3,0,0,0,0,7,9};    //递归创建二叉树    root = createbtree(data, 1);    printf("\n-------原二叉树前序遍历-------\n");    preolder(root);    printf("\n-------原二叉树中序遍历-------\n");    inolder(root);    printf("\n-------原二叉树后序遍历-------\n");    postolder(root);    printf("\n复制该二叉树并打印\n");    temp = copybtree(root);    printf("\n-------复制的二叉树前序遍历-------\n");    preolder(temp);    printf("\n-------复制的二叉树中序遍历-------\n");    inolder(temp);    printf("\n-------复制的二叉树后序遍历-------\n");    postolder(temp);    printf("\n");    return 0;}

截图
这里写图片描述

1 0
原创粉丝点击