//中序遍历二叉树输出第k个元素,先序遍历二叉树输出最后一个元素
#include "iostream.h"
#include "stdlib.h"
#include "conio.h"
#define MaxSize 100
int h=2;//定义为全局变量 ,即要输出的元素 
typedef char ElemType;
typedef struct Node{
    ElemType data;
    struct Node *left,*right;
}BTree;  //树的单元结构
void creatree(BTree **BT,ElemType *str){
    //根据括弧表示法创建一棵二叉树
    BTree *stack[MaxSize],*p;
    int top=-1,k,j=0;  //top为栈指针,k指定是左还是右孩子,j为str指针
    char ch;
    *BT=NULL;
    ch=str[j];
    while(ch!='\0'){
        switch(ch){
        case '(':top++;stack[top]=p;k=1; break; //标示为左孩子
        case ')':top--; break;
        case ',':k=2;//标示为右孩子
                 break;
        default:p=(BTree *)malloc(sizeof(BTree));
                p->data=ch;
                p->left=p->right=NULL;
                if(*BT==NULL)  //根结点
                    *BT=p;
                else{
                    switch(k){
                    case 1:stack[top]->left=(BTree *)malloc(sizeof(BTree));
                        stack[top]->left=p;break;
                     case 2:stack[top]->right=(BTree *)malloc(sizeof(BTree));
                         stack[top]->right=p;
                    }
                }
        }
        j++;
        ch=str[j];
    }
}
void preorder(BTree *BT){  //先序遍历输出最后一个元素 
    if(BT!=NULL){
        if(BT->right==NULL){ //先序输出最后一个肯定是最右下的,如果右没有的话就输出本身
                   cout<<BT->data;
                   return ;
                   } 
        preorder(BT->right);
    }
}
void inorder(BTree *BT){  //中序遍历输出第k个元素
    int n=0; 
    if(BT!=NULL){
        inorder(BT->left);
        {n++;if(n==h){cout<<BT->data;return;}}
        inorder(BT->right);
        }
}

main(){
    char yumensi[100],tianla;
    int i=0;
    cout<<"请用括号表示法输入一棵二叉树并以一个.结束,例如"<<"'A(B(D,E(H,I)),C(G)).'"<<endl;
    cout<<"请注意正确输入因为程序不能判断输入是否正确!!否则后果自负!!"<<endl;
    cin>>tianla;
    while(tianla!='.'){
        yumensi[i]=tianla;
        i++;
        cin>>tianla;
    }
    yumensi[i]='\0';
    BTree *tree;
    creatree(&tree,yumensi);
    cout<<"先序遍历最后一个元素:";
    preorder(tree); cout<<endl;
    cout<<"中序遍历第k个元素:";
    inorder(tree); cout<<endl;
    getch();
}


中序遍历给出第k个元素的时候老是出毛病,程序中k其实是为h,开头的那个全局变量.
解决问题必给分!!