#include<iostream>
#define NULL 0
using namespace std;
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode, *TreeNodePtr;
void createBinaryTree(TreeNodePtr* root) {
char ch;
cin >> ch ;
if (ch == '#') {
*root = NULL;
} else {
*root = new TreeNode;
(*root)->data = ch;
createBinaryTree(&(*root)->left);
createBinaryTree(&(*root)->right);
}
}
void preOrderTraversal(TreeNodePtr root) {
if (root != NULL) {
cout << root->data;
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
}
void postOrderTraversal(TreeNodePtr root) {
if (root != NULL) {
postOrderTraversal(root->left);
postOrderTraversal(root->right);
cout << root->data;
}
}
int countNodes(TreeNodePtr root) {
if (root == NULL) {
return 0;
} else {
return 1 + countNodes(root->left) + countNodes(root->right);
}
}
int getHeight(TreeNodePtr root) {
if (root == NULL) {
return -1;
} else {
int leftHeight = getHeight(root->left);
int rightHeight = getHeight(root->right);
return (leftHeight > rightHeight) ? leftHeight + 1 : rightHeight + 1;
}
}
int countLeaves(TreeNodePtr root) {
if (root == NULL) {
return 0;
} else if (root->left == NULL && root->right == NULL) {
return 1;
} else {
return countLeaves(root->left) + countLeaves(root->right);
}
}
int main() {
printf("请输入不少于8个结点的二叉树的先序遍历结果(用#表示空结点):\n");
TreeNodePtr root;
createBinaryTree(&root);
cout << "先序遍历结果为: ";
preOrderTraversal(root);
cout << endl ;
cout << "后序遍历结果为: " ;
postOrderTraversal(root);
cout << endl ;
cout << "结点数量为:" ;
cout << countNodes(root);
cout << endl ;
cout << "二叉树高度为:" ;
cout << getHeight(root) ;
cout << endl ;
cout << "叶子结点数量为:";
cout << countLeaves(root);
cout << endl ;
return 0;
}