二叉树叶子数量
#include #include usingnamespacestd;
intcount = 0;
classBiTreeNode
{
public:
chardata;//dote
BiTreeNode *LeftChild; //left*
BiTreeNode *RightChild; //right*
BiTreeNode():LeftChild(NULL),RightChild(NULL){}
~BiTreeNode(){}
};
classBiTree
{
private:
BiTreeNode *Root; //root*
intpos;
string strTree;
BiTreeNode* CreateBiTree();
voidPreOrder(BiTreeNode* t); public:
BiTree(){};
~BiTree(){};
voidCreateTree(string TreeArray);
voidPreOrder();
};
voidBiTree::CreateTree(string TreeArray)
{
pos = 0;
strTree.assign(TreeArray);
Root = CreateBiTree(); }
BiTreeNode* BiTree::CreateBiTree() {
BiTreeNode *T;
charch;
ch = strTree[pos++];
if(ch =='0')
T = NULL;
else
{
T =newBiTreeNode();
T->data = ch;
T->LeftChild = CreateBiTree();
T->RightChild = CreateBiTree();
}
returnT;
}
voidBiTree::PreOrder()
{
PreOrder(Root);
}
voidBiTree::PreOrder(BiTreeNode* t) {
if(t)
{
if(t->LeftChild == NULL && t->RightChild == NULL)
count++;
PreOrder(t->LeftChild);
PreOrder(t->RightChild);
}
}
intmain()
{
intt,i;
string s1;
BiTree test;
freopen("cin.txt","r",stdin);
cin>>t;
for(i = 0;i < t;i++)
{
cin>>s1;
test.CreateTree(s1);
test.PreOrder();
cout<