二叉树的复制
来源:互联网 发布:抗衰老精华 知乎 编辑:程序博客网 时间: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
- 二叉树的复制
- 二叉树的复制
- 二叉链表存储的二叉树的复制
- 二叉树的创建、复制、遍历
- 二叉树的递归遍历与复制
- 复制二叉树
- 复制二叉树
- 二叉树采用二叉链表存储,复制二叉树的算法(树的应用)
- 二叉树的创建与遍历&二叉树的高度&二叉树每层结点个数&复制二叉树
- 二叉树5(复制二叉树)
- 复制二叉树(二叉树)
- C++数据结构--二叉树的复制和删除
- 编写复制一颗二叉树的非递归算法
- 复制一棵二叉树的非递归算法
- 基于层次遍历的非递归复制二叉树
- [数据结构] 二叉树的等价判断与复制
- 二叉搜索树的c++实现(含深复制)
- 1021_二叉树的复制和左右子树交换
- HDU 5734 Acperience 【数学计算】
- CodeWars练习之打印菱形
- vim的常用命令
- dedecms 首页调用作者头像
- 恢复windows7的开始菜单栏的搜索框
- 二叉树的复制
- 2016多校联合训练赛 第三场1010 Rower Bo hdu 5761
- Oracle同义词创建及其作用
- 浅谈初识前端
- HDU 3232 Crossing Rivers
- android开发工程师的面试
- js,jq获取select下拉框的各项值
- git checkout commit出现问题,出现no branch问题
- java正则表达式替换字符串中带小数点的数字