



完整代碼:
#include#include#includeusing namespace std;
typedef char ElemType;
typedef struct BiNode {
	ElemType data;
	BiNode* lchild;
	BiNode* rchild;
}BiNode, * BiTree;
//構建二叉樹
BiNode* Create(BiNode* bt) {
	static int i = 0;
	char ch;
	//string str = "AB#D##C##";
	//string str = "124##56##7##3##";
	//string str = "ABD#G##E##CF###";
	string str = "ABD#GH##I##E##CF###";
	ch = str[i++];
	if (ch == '#')bt = NULL;//建立一棵空樹 
	else {
		bt = (BiTree)malloc(sizeof(BiNode)); bt->data = ch;//生成一個結點,數據域為ch
		bt->lchild = Create(bt->lchild);//遞歸建立左子樹
		bt->rchild = Create(bt->rchild);//遞歸建立右子樹
	}
	return bt;
}
//采用遞歸算法實現交換二叉樹的左右子樹,首先交換b結點的左孩子的左右子樹,
//然后交換b結點的右孩子的左右子樹,最后交換b結點的左右孩子,當
//結點為空時遞歸結束(后序遍歷的思想)。算法實現如下:
void swap(BiTree b) {
	//本算法遞歸地交換二叉樹的左右子樹
	BiTree temp;
	if (b) {
		swap(b->lchild);//遞歸地交換左子樹
		swap(b->rchild);//遞歸地交換右子樹
		temp = b->lchild;//交換左右孩子結點
		b->lchild = b->rchild;
		b->rchild = temp;
	}
}
void visit(char c) {
	printf("%c",c);
}
void InOrder(BiTree T) {
	if (T) {
		InOrder(T->lchild);
		visit(T->data);
		InOrder(T->rchild);
	}
}
int main() {
	BiTree T = (BiTree)malloc(sizeof(BiNode));
	T = Create(T);
	printf("交換前的中序遍歷\n");
	InOrder(T);
	swap(T);
	printf("\n交換后的中序遍歷\n");
	InOrder(T);
	printf("\n");
}   實驗結果:
用中序遍歷驗證二叉樹所有結點的左右子樹交換是否成功!



你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
                文章題目:C語言實現把二叉樹中所有結點的左、右子樹進行交換的函數-創新互聯
                
                本文網址:http://www.yijiale78.com/article4/djgcoe.html
            
成都網站建設公司_創新互聯,為您提供網站收錄、軟件開發、網站導航、面包屑導航、標簽優化、定制網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯