1.

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define m 3
#define MAXLEN 100

typedef char datatype;
typedef struct node {
     datatype data;
     struct node *child[m];
} node;
typedef  node *tree;

tree  CreateTree(); /*按前序遍历顺序建立一棵3度树,返回树根地址  */
void LevelOrder(tree t);    /* t为指向树根结点的指针,输出树的层次遍历序列*/
void PreOrder(tree t);    /* t为指向树根结点的指针,输出树的前序遍历序列*/
void PostOrder(tree t); /* t为指向树根结点的指针,输出树的后序遍历序列*/
int main()
{
   tree t;
   t=CreateTree();
   printf("\nthe LevelOrder is:");
   LevelOrder(t);
   printf("\nthe PreOrder is:");
   PreOrder(t);
   printf("\nthe PostOrder is:");
   PostOrder(t);
   return 0;
}
tree  CreateTree()
 {
   int i;
   char ch;
   tree t;
   if ((ch=getchar())=='#')  t=NULL;
   else{
        t=(tree) malloc (sizeof(node));
        t->data=ch;
        for (i=0;i<m;++i)
            t->child[i]= CreateTree();
    }
   return t;
}

void PreOrder(tree t){
    int i;
    if(t!=NULL){
        printf("%c",t->data);
        for(i=0;i<m;i++){
            PreOrder(t->child[i]);
        }
    }
}

void PostOrder(tree t){
    int i;
    if(t!=NULL){
        for(i=0;i<m;i++){
            PostOrder(t->child[i]);
        }
        printf("%c",t->data);
    }
}

void LevelOrder(tree t){
    tree queue[100];
    int f,r,i;
    tree p;
    f=0,r=1;
    queue[0]=t;
    while(f<r){
        p=queue[f++];
        printf("%c",p->data);
        for(i=0;i<m;i++){
            if(p->child[i]){
                queue[r++]=p->child[i];
            }
        }
    }
}

2.

//c++
#include<iostream>
#include <stdlib.h>
#include <malloc.h>
#define m 3
#define MAXLEN 20

typedef char datatype;
typedef struct node {
     datatype data;
     struct node *child[m];
} node;
typedef  node *tree;

tree  CreateTree();
int LeafNodes(tree t);
int Level(tree t,datatype x,int h);
int sum = 0;

int main()
{
   int N,level;
   datatype ch;
   tree t;
   t=CreateTree();
   printf("\nthe LeafNodes is:%d\n",LeafNodes(t));
   scanf("%d",&N);getchar();
   while(N--){
        scanf("%c",&ch);getchar();
        level=Level(t,ch,1);
        if (level==0) printf("the node %c is not exist.\n",ch);
        else printf("the level of the node %c is %d\n",ch,level);
   }
   return 0;
}
int Level(tree t,datatype x,int h)
{
    int level;
    if(t == NULL){
        return 0;
    }
    else {
        if(t->data == x){
            return h;
        }
        else{
            for(int i=0;i<3;i++){
            level = Level(t->child[i],x,h+1);
            if(level != 0){
                return level;
            }
            }
        }
    }
    return 0;
}
int LeafNodes(tree t){
    if(t == NULL){
        return 0;
    }
    int temp = 1;
    if(t){
        for(int i=0; i<3;i++){
            if(t->child[i] != NULL){
                temp = 0;
                break;
            }
        }
        if(temp == 1){
            sum++;
        }
        for(int i=0; i<3;i++){
            if(t->child[i] != NULL){
            LeafNodes(t->child[i]);
        }
        }
    }
    return sum;
}
tree  CreateTree()
 {
   int i;
   char ch;
   tree t;
   if ((ch=getchar())=='#')  t=NULL;
   else{
        t=(tree) malloc (sizeof(node));
        t->data=ch;
        for (i=0;i<m;++i)
            t->child[i]= CreateTree();
    }
   return t;
}