已知二叉树的前序与中序遍历创建二叉树

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 struct Node
 7 {
 8     char data;
 9     Node *lchild;
10     Node *rchild;
11 };
12 Node *CreatTree(string pre,string in)
13 {
14     Node *root=NULL;
15     if(pre.length()>0)
16     {
17         root=new Node;
18         root->data=pre[0];
19         int index=in.find(root->data);
20         root->lchild=CreatTree(pre.substr(1,index),in.substr(0,index));
21         root->rchild=CreatTree(pre.substr(index+1),in.substr(index+1));
22     }
23     return root;
24 }
25 void Preorder(Node *root)
26 {
27     if(root)
28     {
29         putchar(root->data);
30         Preorder(root->lchild);
31         Preorder(root->rchild);
32     }
33 }
34 void Inorder(Node *root)
35 {
36     if(root)
37     {
38         Inorder(root->lchild);
39         putchar(root->data);
40         Inorder(root->rchild);
41     }
42 }
43 void Postorder(Node *root)
44 {
45     if(root)
46     {
47         Postorder(root->lchild);
48         Postorder(root->rchild);
49         putchar(root->data);
50     }
51 }
52 int main()
53 {
54     Node *root;
55     string pre,in;
56     while(cin>>pre>>in)
57     {
58         root=CreatTree(pre, in);
59         Postorder(root);
60         putchar('\n');
61     }
62     return 0;
63 }        

posted on 2012-08-03 09:14  mycapple  阅读(369)  评论(0编辑  收藏  举报

导航