C++实现二叉树的创建和三种遍历

C++实现二叉树及其常规操作

  二叉树是一种基本的数据结构,它的特点是每个节点至多只有两颗子树,并且其子树有左右之分,不能颠倒。通常使用链式存储结构存储二叉树。下面是其的基本C++实现。包括创建二叉树和三种遍历。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 typedef char ElemType;
 5 
 6 //二叉树链式结构实现
 7 typedef struct BinaryTreeNode
 8 {
 9     ElemType data;
10     BinaryTreeNode *left;
11     BinaryTreeNode *right;
12 }BinaryTreeNode, *tree;
13 
14 /*先序遍历二叉树的节点*/
15 void PreOrderTraverse (const tree &T);
16 /*中序遍历二叉树的节点*/
17 void InOrderTraverse (const tree &T);
18 /*后续遍历二叉树的节点*/
19 void PostOrderTraverse (const tree &T);
20 /*按照先序创建二叉树,本例中我们将每个二叉树的节点的空指针引出一个虚节点(代表该节点后面不会再有新的节点,
21  * 即该子书生长结束),其值为一特值,此处使用'#'。因此我们在创建子树时输入的先序序列为AB#D##C##,其只有四个节点
22  * 如下所示:
23  *                         A                           A
24  *                       /    \                                        /   \
25  *     普通二叉树:        B      C       扩展二叉树:                  B      C
26  *                       \                                           /  \    / \
27  *                         D                                       #    D  #   #
28  *                                                                      / \
29  *                                                                    #   #
30  */
31 void CreateTree (tree &T);
32 
33 void PreOrderTraverse (const tree &T)
34 {
35     if (!T)//空树
36     {
37         return;
38     }
39     cout << T->data << " ";
40     PreOrderTraverse (T->left);
41     PreOrderTraverse (T->right);
42 }
43 
44 void InOrderTraverse (const tree &T)
45 {
46     if (!T)//空树
47     {
48         return;
49     }
50     InOrderTraverse (T->left);
51     cout << T->data << " ";
52     InOrderTraverse (T->right);
53 }
54 
55 void PostOrderTraverse (const tree &T)
56 {
57     if (!T)//空树
58     {
59         return;
60     }
61     PostOrderTraverse (T->left);
62     PostOrderTraverse (T->right);
63     cout << T->data << " ";
64 }
65 
66 void CreateTree (tree &T)
67 {
68     char input;
69     cout << "Please input a char: ";
70     cin >> input;
71     if ('#' == input)//默认'#'为结束标示
72     {
73         return;
74     }
75     else
76     {
77         T = new BinaryTreeNode;
78         T->data = input;
79         if (!T)//new failed
80         {
81             return;
82         }
83         CreateTree (T->left);
84         CreateTree (T->right);
85     }
86 }
87 
88 int main ()
89 {
90     tree T;
91     CreateTree (T);
92     cout << "先序遍历:";
93     PreOrderTraverse (T);
94     cout << "中序遍历:";
95     InOrderTraverse (T);
96     cout << "后序遍历:";
97     PostOrderTraverse (T);
98     return 0;
99 }

 

运行结果如下所示:

Please input a char: A
Please input a char: B
Please input a char: #
Please input a char: D
Please input a char: #
Please input a char: #
Please input a char: C
Please input a char: #
Please input a char: #
先序遍历:A B D C 中序遍历:B D A C 后序遍历:D B C A 

 

posted on 2017-03-02 20:47  uestcjoel  阅读(1088)  评论(0编辑  收藏  举报

导航