笔试题:求二叉树第n层的节点数。

来源:互联网 发布:olap oltp 知乎 编辑:程序博客网 时间:2024/06/04 01:13
#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;}
0 0