| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1015 人关注过本帖
标题:创建和复制二叉树改写
只看楼主 加入收藏
luojiajun
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-3-13
收藏
 问题点数:0 回复次数:1 
创建和复制二叉树改写
以下是书本的参考源代码
但是已经默认数据了
求大侠帮我改为可以在运行中自己输入数据
/*二叉树的复制*/
#include<stdlib.h>
#include<stdio.h>
struct tree                                /*定义二叉树结点结构*/
{
   int data;                               /*结点数据*/
   struct tree *left;                      /*指向左子树的指针*/
   struct tree *right;                     /*指向右子树的指针*/
};

typedef struct tree TREENODE;              /*定义二叉树结点新类型*/
typedef TREENODE *BTREE;                   /*定义二叉树结点指针类型*/

BTREE createbtree(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=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);       /*复制右子树*/
      return newnode;
   }
}

void printbtree(BTREE ptr)                         /*中序输出二叉树*/
{
   if(ptr!=NULL)                                   /*终止条件*/
   {
      printbtree(ptr->left);                       /*左子树*/
      printf("[%2d] ",ptr->data);                  /*输出结点内容*/
      printbtree(ptr->right);                      /*右子树*/
   }
}

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}; /*二叉树结点数据,data[0]元素不用*/
   root=createbtree(data,1);                       /*调用创建二叉树函数*/
   backup=copybtree(root);                         /*调用复制二叉树函数*/
   printf("原二叉树的结点内容\n");
   printbtree(root);                               /*调用中序输出二叉树函数*/
   printf("\n备份二叉树的结点内容\n");
   printbtree(backup);                             /*调用中序输出二叉树函数*/
   printf("\n");
}
搜索更多相关主题的帖子: 数据 复制 include 源代码 二叉树 
2012-05-20 22:16
小木虫
Rank: 1
等 级:新手上路
帖 子:4
专家分:4
注 册:2012-6-2
收藏
得分:0 
将main函数中的data[16]数组按中序遍历输入,可以不?
2012-06-02 22:21
快速回复:创建和复制二叉树改写
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033153 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved