```C #pragma clang diagnostic push #pragma ide diagnostic ignored "misc-no-recursion" #include #include typedef int ElementType; struct BTreeNode { ElementType Data; struct BTreeNode *Left; struct BTreeNode *Right; }; int max(int a, int b) { return a > b ? a : b; } void Visit(struct BTreeNode *T) { printf("%d ", T->Data); } void PreOrder(struct BTreeNode *T) { if (T != NULL) { Visit(T); PreOrder(T->Left); PreOrder(T->Right); } } void InOrder(struct BTreeNode *T) { if (T != NULL) { InOrder(T->Left); Visit(T); InOrder(T->Right); } } void PostOrder(struct BTreeNode *T) { if (T != NULL) { PostOrder(T->Left); PostOrder(T->Right); Visit(T); } } int Count(struct BTreeNode *T) { if (T == NULL) { return 0; } return 1 + Count(T->Left) + Count(T->Right); } int CountLeaf(struct BTreeNode *T) { if (T == NULL) { return 0; } if (T->Left == NULL && T->Right == NULL) { return 1; } return CountLeaf(T->Left) + CountLeaf(T->Right); } int Height(struct BTreeNode *T) { if (T == NULL) { return 0; } else { return 1 + max(Height(T->Left), Height(T->Right)); } } void SqPreOrder(char SqTree[], int Index, int MaxSize) { if (Index < MaxSize) { printf("%c ", SqTree[Index]); SqPreOrder(SqTree, 2 * Index + 1, MaxSize); SqPreOrder(SqTree, 2 * Index + 2, MaxSize); } } int main() { //数据初始化 struct BTreeNode *Tree, *n2, *n3, *n4, *n5, *n6; Tree = (struct BTreeNode *) malloc(sizeof(struct BTreeNode)); n2 = (struct BTreeNode *) malloc(sizeof(struct BTreeNode)); n3 = (struct BTreeNode *) malloc(sizeof(struct BTreeNode)); n4 = (struct BTreeNode *) malloc(sizeof(struct BTreeNode)); n5 = (struct BTreeNode *) malloc(sizeof(struct BTreeNode)); n6 = (struct BTreeNode *) malloc(sizeof(struct BTreeNode)); Tree->Data = 1; Tree->Left = n2; Tree->Right = NULL; n2->Data = 2; n2->Left = n3; n2->Right = n4; n3->Data = 3; n3->Left = n3->Right = NULL; n4->Data = 4; n4->Left = n5; n4->Right = n6; n5->Data = 5; n5->Left = n5->Right = NULL; n6->Data = 6; n6->Left = n6->Right = NULL; //测试函数 int count = Count(Tree); printf("count=%d\n", count); int countLeaf = CountLeaf(Tree); printf("countLeaf=%d\n", countLeaf); int height = Height(Tree); printf("height=%d\n", height); printf("PreOrder: "); PreOrder(Tree); printf("\n"); printf("InOrder: "); InOrder(Tree); printf("\n"); printf("PostOrder: "); PostOrder(Tree); printf("\n"); //释放空间 free(Tree); free(n2); free(n3); free(n4); free(n5); free(n6); char SqTree[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'}; int MaxSize = sizeof(SqTree) / sizeof(char); printf("SqPreOrder: "); SqPreOrder(SqTree, 0, MaxSize); printf("\n"); return 0; } #pragma clang diagnostic pop ```