创建树。前序遍历,中序遍历,后序遍历。查找二叉树结点个数,查找二叉树叶子结点个数,查找二叉树度数为1的结点的个数
#include "iostream"
using namespace std;
struct tree
{
int data;
tree *left,*right;
};
class Tree
{
static int n;
static int m;
public:
tree *root;
Tree()
{
root=NULL;
}
void create_Tree(int);
void preorder(tree *);
void inorder(tree *);
void postorder(tree *);
int count(tree *);
int findleaf(tree *);
int findnode(tree *);
};
int Tree::n=0;
int Tree::m=0;
void Tree::create_Tree(int x)
{
tree *t;
t=new(tree);
t->data=x;
t->left=t->right=NULL;
if (root==NULL)
root=t;
else
{
tree *last;
tree *now=root;
while (now!=NULL)
{
last=now;
if (x<now->data)
now=now->left;
else
now=now->right;
}
if (x<last->data)
last->left=t;
else
last->right=t;
}
}
int Tree::count(tree *p)
{
if (p==NULL) return 0;
else
return count(p->left)+count(p->right)+1;
}
int Tree::findleaf(tree *p)
{
if (p==NULL) return 0;
else
{
if (p->left==NULL && p->right==NULL) return n+=1;
else
{
findleaf(p->left);
findleaf(p->right);
}
return n;
}
}
int Tree::findnode(tree *p)
{
if (p==NULL) return 0;
else
{
if (p->left!=NULL && p->right!=NULL)
{
findnode(p->left);
findnode(p->right);
}
if (p->left!=NULL && p->right==NULL)
{
m+=1;
findnode(p->left);
}
if (p->left==NULL && p->right!=NULL)
{
m+=1;
findnode(p->right);
}
}
return m;
}
void Tree::preorder(tree *p)
{
if (p!=NULL)
{
cout<<p->data<<" ";
preorder(p->left);
preorder(p->right);
}
}
void Tree::inorder(tree *p)
{
if (p!=NULL)
{
preorder(p->left);
cout<<p->data<<" ";
preorder(p->right);
}
}
void Tree::postorder(tree *p)
{
if (p!=NULL)
{
postorder(p->left);
postorder(p->right);
cout<<p->data<<" ";
}
}
int main()
{
Tree A;
int n,x;
cout<<"输入点个数:";
cin>>n;
cout<<"输入"<<n<<"个数字: ";
while (n--)
{
cin>>x;
A.create_Tree(x);
}
cout<<"二叉树结点个数:"<<A.count(A.root)<<endl;
cout<<"二叉树叶子节点个数:"<<A.findleaf(A.root)<<endl;
cout<<"二叉树中度数为1的结点的数量为:"<<A.findnode(A.root)<<endl;
cout<<endl<<"先序遍历序列:"<<endl;
A.preorder(A.root);
cout<<endl<<"中序遍历序列:"<<endl;
A.inorder(A.root);
cout<<endl<<"后序遍历序列:"<<endl;
A.postorder(A.root);
return 0;
}