生活随笔
收集整理的這篇文章主要介紹了
数据结构——交换左右子树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
遞歸——層次遍歷—交換左右子樹算法
思路:
與先序遞歸遍歷類似
1如果有子樹,交換這個節(jié)點的左右子樹(和交換兩個變量的值一樣)
2再遞歸這個節(jié)點的左子樹,右子樹;
#include<stdio.h>
#include<bits/stdc++.h>
typedef char TElemType
;
typedef int status
;
typedef struct BiNode
{TElemType data
;struct BiNode
*lchild
;struct BiNode
*rchild
;
}BiNode
,*BiTree
;
void CreateBiTree(BiTree
&T
)
{TElemType ch
;scanf("%c",&ch
);if(ch
=='#')T
=NULL;else {T
=(BiNode
*)malloc(sizeof(BiNode
));if(!T
)exit(-1);T
->data
=ch
;CreateBiTree(T
->lchild
);CreateBiTree(T
->rchild
);}
}void Exchange_lchild_rchild(BiTree
&T
)
{if(T
!=NULL) if(T
->lchild
!=NULL||T
->rchild
!=NULL){BiTree temp
;temp
=T
->lchild
;T
->lchild
=T
->rchild
;T
->rchild
=temp
;Exchange_lchild_rchild(T
->lchild
);Exchange_lchild_rchild(T
->rchild
);}}int BiTree_height1(BiTree T
)
{if(T
==NULL)return 0;else{if(BiTree_height1(T
->lchild
)>BiTree_height1(T
->rchild
))return 1+BiTree_height1(T
->lchild
);elsereturn 1+BiTree_height1(T
->rchild
);}}
void printNodeAtLevel(BiTree T
,int level
)
{ if(T
==NULL||level
<0) return; if(level
==0) { printf("%c ",T
->data
);return; } printNodeAtLevel(T
->lchild
,level
-1); printNodeAtLevel(T
->rchild
,level
-1);
}void levelOrder(const BiTree T
)
{if(T
==NULL)return;int totalLevel
= BiTree_height1(T
);for(int i
= 0; i
< totalLevel
; i
++){printNodeAtLevel(T
, i
);printf("\n");}
} int main(){BiTree T
;printf("′′?¨ê÷ê?è?ê÷Tμ??èDòDòáD(???Dê1ó?#′ú±í???úμ?)\n");CreateBiTree(T
);levelOrder(T
);printf("????ê÷×óóò×óê÷??·¨\n");Exchange_lchild_rchild(T
);levelOrder(T
);}
總結
以上是生活随笔為你收集整理的数据结构——交换左右子树的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。