using namespace std;
struct TreeNode//树 结构体
{
char data;
TreeNode* lchild;
TreeNode* rchild;
};
typedef TreeNode* Tree;
void CreateTree(char* pre, char* in, int i, int j, int k, Tree &T)//插入元素,构造树
{
if (k == 0)
{
T = NULL;
}
else
{
T = (Tree)malloc(sizeof(TreeNode));
T->data = pre[i];
int p = 0;
while (in[j + (p++)] != pre[i]);
p--;
CreateTree(pre, in, i + 1, j, p, T->lchild);
CreateTree(pre, in, i + p + 1, j + p + 1, k - (p + 1), T->rchild);
}
}
void preorder(Tree T)//先序遍历
{
if (T != NULL)
{
printf("%c ", T->data);
preorder(T->lchild);
preorder(T->rchild);
}
}
void inorder(Tree T)//中序遍历
{
if (T != NULL)
{
inorder(T->lchild);
printf("%c ", T->data);
inorder(T->rchild);
}
}
void postorder(Tree T)//后序遍历
{
if (T)
{
postorder(T->lchild);
postorder(T->rchild);
printf("%c ", T->data);
}
}
int Max(int a, int b)
{
return a >= b ? a : b;
}
int Hight(Tree T)//求树的高度
{
if (T == NULL)
{
return 0;
}
else
{//该节点非空,本身至少有一层
return Max(Hight(T->lchild), Hight(T->rchild)) + 1;
}
}
TreeNode* Moveto(Tree T, char c)//找到根节点为C的子树?????
{
if (T != NULL)
{
if (T->data == c)
{
return T;
}
Tree T1 = Moveto(T->lchild, c);
if (T1 != NULL)
{
return T1;
}
Tree T2 = Moveto(T->rchild, c);
if (T2 != NULL)
{
return T2;
}
}
else
{
return NULL;
}
}
int countnode(Tree T)//求树中节点总个数
{
if (!T)
{
return 0;
}
else
{
return(countnode(T->lchild) + countnode(T->rchild)+1);
}
}
int countleaves(Tree T)//求叶子节点个数
{
if (T == NULL)
{
return 0;
}
else
{
if (T->lchild == NULL && T->rchild == NULL)
{
return 1;
}
else
{
return(countleaves(T->lchild)+countleaves(T->rchild));
}
}
}
int CountNodeofTree(Tree T, char c)
{
Tree t1 = Moveto(T,c);
return countnode(t1);
}
int FORRRR(int e)
{
for (int i = 1; i <= e; i++)
{
if (i = 5 )
{
return 1;
}
if (i = 3)
{
return 1;
}
else
return FORRRR(e - 1);
}
}
int main()
{
printf("输出的结果是%d\n", FORRRR(10));
Tree T = NULL;
char* pre = "EBADCFHGIKJ";
char* in = "ABCDEFGHIJK";
CreateTree(pre, in, 0, 0, 11, T);
printf("%d\n", Hight(T));
preorder(T);
printf("\n");
inorder(T);
printf("\n");
postorder(T);
printf("\n");
printf("%d\n", countnode(T));
printf("%d\n", countleaves(T));
char a;
scanf("%c", &a);
printf("%d\n", CountNodeofTree(T,a));
char c;
scanf("%c", &c);
return 0;
}