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 }


 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。