二叉树的复制

来源:互联网 发布:springmvc找不到js 编辑:程序博客网 时间:2024/05/08 12:10

题目:把一棵二叉树复制到另一棵二叉树

  •                   =》      

// *    二叉树的复制                          */// * ======================================== */#include "stdio.h"#include "stdlib.h"struct tree                       {   int data;                      // * 节点数据           */   struct tree *left;             // * 指向左子树的指针   */   struct tree *right;            // * 指向右子树的指针   */};typedef struct tree treenode;     typedef treenode *btree;          // * ---------------------------------------- */// *  建立二叉树                              */// * ---------------------------------------- */btree createbtree(int *data,int pos)     //data为赋值给二叉树的各个节点的值,pos为data数组中的位置{   btree newnode;                   if ( data[pos] == 0 || pos > 15 )          return NULL;   else   {      newnode = ( btree ) malloc(sizeof(treenode));      newnode->data = data[pos];        newnode->left = createbtree(data,2*pos);      newnode->right = createbtree(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);     //分配右孩子的值<span style="white-space:pre">      return newnode;                             //返回新二叉树的根节点<span style="white-space:pre">   }}// * ---------------------------------------- */// *  二叉树中序列印                          */// * ---------------------------------------- */void printbtree(btree ptr){   if ( ptr != NULL )                {      printbtree(ptr->left);            printf("[%2d]",ptr->data);        printbtree(ptr->right);        }}// * ---------------------------------------- */// *  主程式: 建立二叉树后备份它.             */// * ---------------------------------------- */void main(){   btree root = NULL;             // * 指向原二叉树的根节点的指针       */   btree backup = NULL;           // * 复制二叉树的根节点的指针     */   // * 二叉树节点数据 */   int data[16] = { 0, 5, 4, 6, 2, 0, 0, 8, 1,                    3, 0, 0, 0, 0, 7, 9 };   root = createbtree(data,1);    // * 建立树状结构       */   backup = copybtree(root);      // * 复制二叉树         */   printf("原二叉树的节点内容 \n");   printbtree(root);              // * 中序列二叉树       */   printf("\n备份二叉树的节点内容 \n");   printbtree(backup);            // * 中序列二叉树       */   printf("\n");                  // * 换行               */}



0 0
原创粉丝点击