``
#include<iostream>
#include<cstring>
using namespace std;
struct TreeNode
{
char data;
TreeNode *left,*right;
};
///CreateTree
///前序中序建树
TreeNode * BT(char str1[],char str2[],int n)
{
int i;
TreeNode *root;
root = new TreeNode;
if(n==0)
root = NULL;
else
{
root -> data = str1[0];
for(i=0; i<n; i++)
if(str1[0]==str2[i])
break;
root->left = BT(str1+1,str2,i);
root->right = BT(str1+1+i,str2+i+1,n-i-1);
}
return root;
}
///四种递归输出方式
void Preorder(TreeNode *root)
{
if(root)
{
cout<<root->data;
Preorder(root->left);
Preorder(root->right);
}
}
void Inorder(TreeNode *root)
{
if(root)
{
Inorder(root->left);
cout<<root->data;
Inorder(root->right);
}
}
void Postorder(TreeNode *root)
{
if(root)
{
Postorder(root->left);
Postorder(root->right);
cout<<root->data;
}
}
/*
void Level(TreeNode *root);
///四种非递归输出方式
void Preorder(TreeNode *root);
void Inorder(TreeNode *root);
void Postorder(TreeNode *root);
*/
void Level(TreeNode *root)
{
int in = 0,out = 0;
TreeNode * temp[110];
temp[in++] = root;
while(in>out)
{
if(temp[out])
{
cout<<temp[out]->data;
temp[in++] = temp[out]->left;
temp[in++] = temp[out]->right;
}
out++;
}
}
///计算叶子数
int LeafSum;
void Leaf(TreeNode *root)
{
if(root)
{
if(root->left == NULL && root->right == NULL)
LeafSum++;
if(root->left)
Leaf(root->left);
if(root->right)
Leaf(root->right);
}
}
///递归求深度
int depth(TreeNode *root)
{
if(!root)
return 0;
int h1 = depth(root->left);
int h2 = depth(root->right);
if(h1 > h2)
return ++h1;
else
return ++h2;
}
int main()
{
TreeNode *root;
char str1[111],str2[111];
while(cout<<"Please input preoder and inorder(end in -1 and -1):\n" && cin>>str1>>str2)
{
int n = strlen(str1);
root = BT(str1,str2,n);
cout<<"前序输出:";
Preorder(root);
cout<<endl;
cout<<"中序输出:";
Inorder(root);
cout<<endl;
cout<<"后序输出:";
Postorder(root);
cout<<endl;
cout<<"二叉树叶子个数为:";
LeafSum = 0;
Leaf(root);
cout<<LeafSum<<endl;
cout<<"二叉树高度为:";
cout<<depth(root)<<endl;
}
return 0;
}
。。。
最新推荐文章于 2024-05-15 00:10:22 发布