建立一棵二叉樹,用二叉連結清單存儲二叉樹,計算二叉樹中包含的結點個數。
輸入描述:
輸入的資料隻有一組,是一棵二叉樹的先序周遊序列,結點的值為一個小寫字母,#号表示空結點,
如輸入:a b d e # # f # # # c # #,資料之間空一個格,得到的二叉樹如下。
( 圖暫時不能上傳,請同學們自己畫出圖)
輸出描述:
輸出二叉樹的結點個數,空樹輸出NULL。
輸入樣例:
輸入樣例1:
a b c # # # d e # # f # #
輸入樣例2:
#
輸出樣例:
輸出樣例1:
6
輸出樣例2:
NULL
#include<iostream>
#include<stdio.h>
#include<cstdlib>
using namespace std;
static int count=0;
struct Node
{
char data;
Node *Lchild,*Rchild;
};
class BiTree
{
public:
BiTree(){root=Create(root);}
~BiTree(){Release(root);}
void print(){print(root);}
private:
Node *root;
Node *Create(Node *bt);
void Release(Node *bt);
void print(Node *bt);
};
Node*BiTree::Create(Node *bt)
{
char s;
cin>>s;
if(s=='#')
bt=NULL;
else{
bt=new Node;
bt->data=s;
count++;
bt->Lchild=Create(bt->Lchild);
bt->Rchild=Create(bt->Rchild);
}
return bt;
}
void BiTree::Release(Node *bt)
{
if(bt!=NULL){
Release(bt->Lchild);
Release(bt->Rchild);
delete bt;
}
}
void BiTree::print(Node *bt)
{
if(bt!=NULL)
{
if(!bt->Lchild&&!bt->Rchild) {
// cout<<bt->data<<" ";
}
print(bt->Lchild);
print(bt->Rchild);
}
if(root==NULL){
cout<<"NULL";
exit(0);
}
}
int main()
{
BiTree one;
one.print();
cout<<count;
return 0;
}