难点创建二叉树,交换,这里均采用递归方法来做。
相信大家一看就懂。
// ChangeChild.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <Windows.h>
using namespace std;
typedef char element;
typedef struct bitree
{
element data;
struct bitree* lchild;
struct bitree* rchild;
}bitree;
//交换左右子树
void changechild(bitree* root)
{
//element eleTemp;
bitree* bitTemp;
if (root == NULL)
{
root = NULL;
}
else
{
bitTemp = root->lchild;
root->lchild = root->rchild;
root->rchild = bitTemp;
changechild(root->lchild);
changechild(root->rchild);
}
}
void CreateBiTree(bitree* &T)
{
char ch;
cin>>ch;
if(ch=='#') T=NULL;
else
{
T=(bitree *)malloc(sizeof(bitree));
T->data=ch;
cout<<"put in \'"<<T->data<<"\' lchild"<<endl;
CreateBiTree(T->lchild);
cout<<"put in \'"<<T->data<<"\' rchild"<<endl;
CreateBiTree(T->rchild);
}
}//CreateBiTree
void PreTraversal(bitree* T)
{
if (T == NULL)
{
return;
}
else
{
printf("%c,",T->data);
PreTraversal(T->lchild);
PreTraversal(T->rchild);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
bitree* b1 ;
b1= (bitree *)malloc(sizeof(bitree));
bitree* broot;
broot = b1;
printf("enter # is over,put in root node\n");
CreateBiTree(b1);
printf("created tree\n");
PreTraversal(b1);
changechild(b1);
printf("\nafter change lchild ,rchild\n");
PreTraversal(b1);
system("pause");
return 0;
}