• 如何复制一棵二叉树


    基本思路:

    (1)如果树非空,则复制该根节点,同时,把这两个节点分别进入QueueFormer,QueueCopy

    (2)让pFormer指向QueueFormer的对头,pCopy指向QueueCopy的队头。

    (3)pFormer的左右孩子,若非空,则复制其data,同时修改pCopy的左右孩子的指针,并对非空节点都入站操作,

    (4)对QueueFormer和QueueCopy出栈(对头节点已完成复制)

    (5)重复(2)~(4)直到队列为空

    (6)返回头指针,复制完成。

    代码:

     1 BinTree CopyTree(BinTree BT){
     2     Queue QueueFormer;
     3     Queue QueueCopy;
     4     BinTree root=NULL;
     5     init(QueueFomer);
     6     init(QueueCopy);
     7     if(BT!=NULL){
     8         root=(BinTree)malloc(sizeof(BinTNode));
     9         root->data=BT->data;
    10         root->lchild=NULL;
    11         root->rchild=NULL:
    12         EnQueue(QueueFormer,BT);
    13         EnQueue(QueueCopy,root);
    14     }
    15     while(!isEmptyQueue(QueueFormer)){
    16         BinTree pFomer=QueueHeader(QueueFormer);
    17         BinTree pCopy=QueueHeader(QueueCopy);
    18         if(pFormer->lchild!=NULL)//复制左孩子
    19         {
    20              BinTree temp=(BinTree)malloc(sizeof(BinTNode));
    21              temp->data=pFormer->lchild->data;
    22              temp->lchild=NULL;
    23              temp->rchild=NULL:
    24              pCopy->lchild=temp;
    25              EnQueue(QueueFormer,pFormer->lchild);
    26              EnQueue(QueueCopy,temp):
    27         }
    28         if(pFormer->rchild!=NULL)//复制右孩子
    29         {
    30              BinTree temp=(BinTree)malloc(sizeof(BinTNode));
    31              temp->data=pFormer->rchild->data;
    32              temp->lchild=NULL;
    33              temp->rchild=NULL:
    34              pCopy->rchild=temp;
    35              EnQueue(QueueFormer,pFormer->rchild);
    36              EnQueue(QueueCopy,temp);
    37         }
    38         DeQueue(QueueFormer);
    39         DeQueue(QueueCopy);
    40     }
    41 return root;
    42 }
  • 相关阅读:
    leetcode-38.报数
    leetcode-35.搜索插入位置
    leetcode-27.移除元素
    leetcode-26.删除重复数组中的重复项
    leetcode-20.有效的括号
    leetcode-973最接近原点的K个点
    leetcode-14最长公共前缀
    leetcode-13罗马字符转整数
    MFC俄罗斯方块
    leetcode-9.回文数(水仙花数)
  • 原文地址:https://www.cnblogs.com/GoAhead/p/2514712.html
Copyright © 2020-2023  润新知