C++二叉树先序、中序、后序遍历

 1 #include <iostream>
 2 using namespace std;
 3 
 4 typedef struct BTNode
 5 {
 6     char data;
 7     struct BTNode * lchild;
 8     struct BTNode * rchild;
 9 }BTNode;
10 
11 BTNode * initBTNode()
12 {
13     BTNode *node = (BTNode*)malloc(sizeof(BTNode));
14     node->lchild=0;
15     node->rchild=0;
16     return node;
17 }
18 
19 BTNode * init(BTNode *p)
20 {
21     BTNode *A=initBTNode();
22     BTNode *B=initBTNode();
23     BTNode *C=initBTNode();
24     BTNode *D=initBTNode();
25     BTNode *E=initBTNode();
26     BTNode *F=initBTNode();
27         
28     A->data='A';
29     B->data='B';
30     C->data='C';
31     D->data='D';
32     E->data='E';
33     F->data='F';
34     
35     C->lchild=E;
36     C->rchild=F;
37     B->lchild=D;
38     A->rchild=C;
39     A->lchild=B;
40 
41     p=A;
42     return p;
43 }
44 
45 void visit(BTNode *p)
46 {
47     cout << p->data << " ";
48 }
49 
50 void preorder(BTNode *p)
51 {
52     if(p!=0)
53     {
54         visit(p);
55         preorder(p->lchild);
56         preorder(p->rchild);
57     }
58 }
59 
60 void inorder(BTNode *p)
61 {
62     if(p!=0)
63     {
64         inorder(p->lchild);
65         visit(p);
66         inorder(p->rchild);
67     }
68 }
69 
70 void postorder(BTNode *p)
71 {
72     if(p!=0)
73     {
74         postorder(p->lchild);
75         postorder(p->rchild);
76         visit(p);
77     }
78 }
79 
80 int main(int argc, char* argv[])
81 {
82     BTNode *node=new BTNode;
83     BTNode *p=init(node);
84     cout << "先序遍历:" ;
85     preorder(p);
86     cout << endl;
87     cout << "中序遍历:" ;
88     inorder(p);
89     cout << endl;
90     cout << "后序遍历:" ;
91     postorder(p);
92     cout << endl;
93     return 0;
94 }


 

posted @ 2015-04-29 21:29  薛晓东  阅读(521)  评论(0编辑  收藏  举报