1.题目:
Problem Description
设有一棵二叉树,其节点值为字符型并假设各值互不相等,采用二叉链表存储表示。现输入其扩展二叉树的前序遍历序列,要求建立该二叉树,并求其节点个数。
Input
第一行为一个整数n,表示以下有n组数据,每组输入一行字符串(字符串长度小于等于50),这个字符串为扩展二叉树的前序遍历序列。
Output
输出该二叉树的结点个数。
Sample Input
2
AB#D##C##
ABD##E##C#F##
Sample Output
4
6
Author
2.参考代码:
#include <iostream>
#include <cstring>
using namespace std;
int count=0;
struct BiNode{
char date;
BiNode* lchild,* rchild;
};
class BiTree{
private:
BiNode* root;
BiNode* Creat();
void Release(BiNode* root);
public:
BiTree();
~BiTree();
BiNode* Getroot();
void Getcount(BiNode* root);
};
BiNode* BiTree::Creat(){
BiNode* root;
char ch;
cin>>ch;
if(ch=='#')
root=NULL;
else
{
root=new BiNode;
root->date=ch;
root->lchild=Creat();
root->rchild=Creat();
}
return root;
}
void BiTree::Release(BiNode* root){
if(root)
{
Release(root->lchild);
Release(root->rchild);
delete root;
}
}
BiTree::BiTree(){
root=Creat();
}
BiTree::~BiTree(){
Release(root);
}
BiNode* BiTree::Getroot(){
return root;
}
void BiTree::Getcount(BiNode* root){
if(root)
{
count++;
Getcount(root->lchild);
Getcount(root->rchild);
}
}
int main()
{
int n;
cin>>n;
while(n--)
{
BiTree bt;
BiNode* root=bt.Getroot();
bt.Getcount(root);
printf("%d\n",count);
count=0;
}
return 0;
}
本文介绍了一种通过前序遍历序列构建二叉树的方法,并计算二叉树中节点的数量。提供了完整的C++代码实现,适用于理解二叉树的构建过程及递归算法的应用。
380

被折叠的 条评论
为什么被折叠?



