二叉树遍历主要有3种方式:先序遍历,中序遍历,后序遍历。
二叉树是每个节点最多有两个子树的树结构。
二叉树可以为空,但树不能为空。
二叉树中每个元素的子树都是有序的。
1 #include "iostream"
2 #define N 7
3
4 using namespace std;
5
6 typedef struct node
7 {
8 int data;
9 struct node *leftChild;
10 struct node *rightChild;
11 }BiTreeNode,*BiTree;
12
13 BiTreeNode *createNode(int i)
14 {
15 BiTreeNode *q = new BiTreeNode;
16 q->leftChild = NULL;
17 q->rightChild = NULL;
18 q->data = i;
19 return q;
20 }
21
22 BiTree createBiTree()
23 {
24 BiTreeNode *p[N] = {NULL};
25 int i;
26 for (i=0;i<N;i++)
27 {
28 p[i] = createNode(i+1);
29 }
30
31 for (i=0;i<N/2;i++)
32 {
33 p[i]->leftChild = p[i*2+1];
34 p[i]->rightChild = p[i*2+2];
35 }
36
37 return p[0];
38 }
39
40 void preOrderTraverse(BiTree T)//先序
41 {
42 if (T)
43 {
44 cout << T->data << " ";
45 preOrderTraverse(T->leftChild);
46 preOrderTraverse(T->rightChild);
47 }
48 }
49
50 void preOrderTraverse1(BiTree T)//中序
51 {
52 if (T)
53 {
54 preOrderTraverse1(T->leftChild);
55 cout << T->data << " ";
56 preOrderTraverse1(T->rightChild);
57 }
58 }
59
60 void preOrderTraverse2(BiTree T)//后序
61 {
62 if (T)
63 {
64 preOrderTraverse2(T->leftChild);
65 preOrderTraverse2(T->rightChild);
66 cout << T->data << " ";
67 }
68 }
69
70
71 int main()
72 {
73 BiTree T;
74
75 T = createBiTree();
76
77 cout << "先序遍历:" << endl;
78 preOrderTraverse(T);
79 cout << endl << endl ;
80
81 return 0;
82 }
——整理自《C/C++程序员面试宝典》