二叉树的复制

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

  •                   =》      

// *    二叉树的复制                          */
// * ======================================== */
#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");                  // * 换行               */
}



  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值