어떻게 두 갈래 나무를 복제합니까

5222 단어 두 갈래 나무
기본 사고방식:
(1) 트리가 비어 있지 않으면 루트를 복사하고 이 두 노드를 각각QueueFormer,QueueCopy
(2) pFormer가 QueueFormer의 맞은편을 가리키고 pCopy가 QueueCopy의 팀 머리를 가리킨다.
(3) pFormer의 좌우 아이가 비어 있지 않으면 데이터를 복사하고 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 }

좋은 웹페이지 즐겨찾기