#include <iostream> using namespace std; //二叉树建树的过程 struct tree{ char data; tree* left; tree* right; }; tree *creat(tree *root){ char ch; scanf("%c", &ch); if(ch == ','){ root = NULL; }else{ root = new tree; root->data = ch; root->left = creat(root->left); root->right = creat(root->right ); } return root; } tree *build(int ps, int is, int n){ //preorder为先序遍历序列,inorder为中序遍历序列 //ps为先序的起始位置,is为中序的起始位置,n为序列元素个数 int k; for(k = is; k <= is + n-1; k++){ if(preorder[ps] == inorder[k]) break; } tree *t = new tree; t->data = preorder[ps]; //当中序遍历序列的起始位置为根节点时说明该树无左子树 if(k == is) t->left = NULL; else t->left = build(ps + 1, is, k - is);//递归建立左子树 //当中序遍历序列的最后一个元素是根节点时说明 //该节点无右子树 if(k == is + n - 1){ t->right = NULL; }else{ t->right = build(ps + 1 + (k - is), k + 1, n - (k - is) - 1); } return t; } int main(){ return 0; }