/************************
author's email:wardseptember@gmail.com
date:2017.12.22
************************/
#include<iostream>
using namespace std;
typedef struct BTNode
{
char data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode,*BTree;
BTree createTree();
void preorder(BTNode *p);
void inorder(BTNode *p);
void postorder(BTNode *p);
int getDepth(BTNode *p);
void postsearch(BTNode *p, BTNode *&q, char key);
void insearch(BTNode *p, BTNode *&q, char key);
int main() {
BTree pTree = createTree();
char key;
BTNode *q=NULL;
cout << "前序序列:";
preorder(pTree);
cout << '\n';
cout << "中序序列:";
inorder(pTree);
cout << '\n';
cout << "后序序列:";
postorder(pTree);
cout << '\n';
cout << "二叉树的深度:";
cout << getDepth(pTree) << endl;
cout << "请输入要查找的值(A-Z):";
cin >> key;
postsearch(pTree, q, key);
if (q != NULL)
cout << "前序查找成功"<<endl;
else
cout << "前序查找失败" << endl;
insearch(pTree, q, key);
if (q != NULL)
cout << "中序查找成功" << endl;
else
cout << "中序查找失败" << endl;
return 0;
}
//创建一棵二叉树
BTree createTree() {
BTree pA = (BTNode *)malloc(sizeof(BTNode));
BTree pB = (BTNode *)malloc(sizeof(BTNode));
BTree pC = (BTNode *)malloc(sizeof(BTNode));
BTree pD = (BTNode *)malloc(sizeof(BTNode));
BTree pE = (BTNode *)malloc(sizeof(BTNode));
BTree pF = (BTNode *)malloc(sizeof(BTNode));
pA->data = 'A';
pB->data = 'B';
pC->data = 'C';
pD->data = 'D';
pE->data = 'E';
pF->data = 'F';
pA->lchild = pC;
pA->rchild = pB;
pC->lchild = pD;
pC->rchild = pE;
pB->rchild = pF;
pB->lchild = NULL;
pD->lchild = pD->rchild = NULL;
pE->lchild = pE->rchild = NULL;
pF->lchild = pF->rchild = NULL;
return pA;
}
//前序遍历此树
void preorder(BTNode *p) {
if (p != NULL) {
cout << p->data;
preorder(p->lchild);
preorder(p->rchild);
}
}
//中序遍历此树
void inorder(BTNode *p) {
if (p != NULL) {
inorder(p->lchild);
cout << p->data;
inorder(p->rchild);
}
}
//后序遍历此树
void postorder(BTNode *p) {
if (p != NULL) {
postorder(p->lchild);
postorder(p->rchild);
cout << p->data;
}
}
//求树的深度
int getDepth(BTNode *p) {
int LD, RD;
if (p ==NULL)
return 0;
else
{
LD = getDepth(p->lchild);
RD = getDepth(p->rchild);
return (LD > RD ? LD : RD) + 1;
}
}
//前序遍历查找key
void postsearch(BTNode *p, BTNode *&q, char key) {
if (p != NULL)
{
if (p->data == key) {
q = p;
}
else
{
postsearch(p->lchild, q, key);
if (q == NULL)
postsearch(p->rchild, q, key);
}
}
}
//中序遍历查找key
void insearch(BTNode *p, BTNode *&q, char key) {
if (p != NULL) {
insearch(p->lchild, q, key);
if (p->data == key) {
q = p;
}
else
insearch(p->rchild, q, key);
}
}
//后序遍历查找key类似,不再累述
以上如有错误请指出,大家共同学习进步。