#include <iostream>
using namespace std;
typedef char DataType;
//二叉树结点定义
struct node
{
DataType data; //存放结点数据
struct node* lchild, * rchild; //左右孩子指针
};
typedef struct node BiTree;
BiTree* createBiTree() //利用递归方法按先序遍历创建二叉树,并返回二叉树的根结点指针
{
char ch;
BiTree* T;
cin >> ch;
if (ch == '#')T = NULL;
else
{
T = new struct node;
T->data = ch;
T->lchild = createBiTree();
T->rchild = createBiTree();
}
return T;
}
void preOrder(BiTree* T)//先根遍历二叉树(递归)
{
if (T == NULL)return;
else
{
cout << T->data<<" ";
preOrder(T->lchild);
preOrder(T->rchild);
}
}
void inOrder(BiTree* T)//中根遍历二叉树(递归)
{
if (T == NULL)return;
else
{
inOrder(T->lchild);
cout << T->data<<" ";
inOrder(T->rchild);
}
}
void postOrder(BiTree* T)//后根遍历二叉树(递归)
{
if (T == NULL)return;
else
{
postOrder(T->lchild);
postOrder(T->rchild);
cout << T->data<<" ";
}
}
void Leaf(BiTree*T)
{
//输出二叉树中的叶子结点
if (T == NULL)return;
else
{
if (T->lchild == NULL && T->rchild == NULL)
cout<< T->data << " ";
else
{
Leaf(T->lchild);
Leaf(T->rchild);
}
}
}
void changeLR(BiTree*T)
{
//二叉树左右子树互换
if (T == NULL) return;
else
{
BiTree* t = T->rchild;
T->rchild = T->lchild;
T->lchild = t;
changeLR(T->lchild);
changeLR(T->rchild);
}
}
int main(void)
{
BiTree* T;
T = createBiTree();
printf("先序遍历的结果为:"); preOrder(T);
cout << endl; //换行
printf("中序遍历的结果为:"); inOrder(T);
cout << endl;
printf("后序遍历的结果为:"); postOrder(T);
cout << endl;
printf("叶子结点为:"); Leaf(T);
cout << endl;
printf("左右子树交换后先序遍历的结果为:"); changeLR(T); preOrder(T);
return 0;
}
运行结果: