#include <iostream>
#include <string.h>
using namespace std;
template<typename T>
struct Node
{
T data;
Node<T> *left;
Node<T> *right;
Node(T d = T()) :data(d), left(NULL), right(NULL){}
};
template<typename T>
class MyTree
{
public:
MyTree() :root(NULL){}
void Create_Tree(char *LVR,char *LRV)
{
int n = strlen(LRV);
Create_Tree(root,LVR,LRV,n);
}
void Printf()
{
Printf(root);
}
int GetNum(int x)
{
int count = 0;//计数。
x--;
GetNum(root,count,x);
return count;
}
private:
void GetNum(Node<T> *t, int &count, int x)
{
if (t == NULL)return;
else if (x == 0)
{
count++;
return;
}
else
{
GetNum(t->left,count,x-1);
GetNum(t->right, count, x - 1);
}
}
void Printf(Node<T> *t)
{
if (t == NULL)return;
else
{
cout << t->data << " ";
Printf(t->left);
Printf(t->right);
}
}
void Create_Tree(Node<T> *&t, char *LVR, char *LRV, int len)
{
if (len == 0)return;
int i = 0;
while (LVR[i] != LRV[len - 1])i++;
t = new Node<T>(LVR[i]);
Create_Tree(t->right,LVR+i+1,LRV+i,len-i-1);
Create_Tree(t->left,LVR,LRV,i);
}
private:
Node<T> *root;
};
int main()
{
MyTree<char> mt;
char LVR[] = "DCBA";
char LRV[] = "DCBA";
mt.Create_Tree(LVR, LRV);
mt.Printf();
cout << endl;
for (int i = 1; i <= 4; i++){
cout << mt.GetNum(i) << endl;//打印指定层数的节点个数。
}
return 0;
}
笔试题:求二叉树第n层的节点数。
最新推荐文章于 2022-02-08 18:24:26 发布
本文介绍了一种使用模板类实现的二叉树的创建与遍历方法,包括前序、中序、后序遍历,并提供了节点数量获取的功能。
763

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



