//實(shí)驗題目:已知二叉樹(shù)以二叉鏈表作為存儲結構,寫(xiě)一個(gè)算法來(lái)交換二叉樹(shù)的所有節點(diǎn)的左右子樹(shù)
//先建立二叉樹(shù)的二叉鏈表存儲結構,再完成算法,注意結果的輸出形式
#include <stdio.h>
#include <malloc.h>
#include <windows.h>
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
//定義二叉樹(shù)數據類(lèi)型
typedef char TElemtype;
typedef struct BiTNode
{
TElemtype data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//-------二叉樹(shù)基本操作-------
//初始化二叉樹(shù)
bool InitBiTree(BiTree &T)
{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=NULL;
T->lchild=NULL;
T->rchild=NULL;
return true;
}
//創(chuàng )建二叉樹(shù)
void CreateBiTree(BiTree &T)
{
TElemtype c=' ';
c=getchar();
getchar();
if(c==' ')
{
T=NULL;
}
else
{
InitBiTree(T);
T->data=c;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
//操作函數---輸出
bool Visit(TElemtype e)
{
if(e!=NULL)
{
printf("%c ",e);
return true;
}
else
{
return false;
}
}
//先序遍歷二叉樹(shù)
bool PreOrderTraverse(BiTree T,bool Visit(TElemtype))
{
if(T)
{
if(Visit(T->data))
{
if (PreOrderTraverse(T->lchild,Visit))
{
if (PreOrderTraverse(T->rchild,Visit))
{
return true;
}
}
}
return false;
}
else
{
return true;
}
}
//----------------------------
//定義棧的數據類(lèi)型
typedef struct
{
TElemtype *base;
TElemtype *top;
int stacksize;
}SqStack;
//交換左右子樹(shù)
void exchange(BiTree &rt){
BiTree temp = NULL;
if(rt->lchild == NULL && rt->rchild == NULL)
return;
else{
temp = rt->lchild;
rt->lchild = rt->rchild;
rt->rchild = temp;
}
if(rt->lchild)
exchange(rt->lchild);
if(rt->rchild)
exchange(rt->rchild);
}
//-------Main函數----
void main()
{
BiTree T;
MessageBox(NULL,"請按照先序遍歷輸入二叉樹(shù)!","提示",MB_OK|MB_ICONWARNING);
MessageBox(NULL,"請輸入數據!(空格表示結束)","提示",MB_OK|MB_ICONWARNING);
CreateBiTree(T);
MessageBox(NULL,"輸入結束!","提示",MB_OK|MB_ICONWARNING);
printf("\n按先序輸出\n");
PreOrderTraverse(T,Visit);
MessageBox(NULL,"輸出結束!","提示",MB_OK|MB_ICONWARNING);
printf("\n交換后\n");
exchange(T);
PreOrderTraverse(T,Visit);
}
聯(lián)系客服