编程语言
首页 > 编程语言> > C++ 实现二叉树的三种遍历

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

作者:互联网

二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。二又树的特点是每个结点最多有两个子女,分别称为该结点的左子女和右子女。在二又树中不存在度大于2的结点,并且二又树的子树有左、右之分,其子树的次序不能颠倒。二又树是分支数最大不超过2的有根有序树。

 

先序遍历:

 

 

中序遍历:

 

代码:

构造如下的一个二叉树:G(E(B(A,),C),F(,D))

 

 1 #include <iostream>
 2 
 3 //结点类型
 4 template <typename T>
 5 struct BinTreeNode
 6 {
 7     T data;                                                                                                        //结点中存储的数据
 8     BinTreeNode<T> *leftChild, *rightChild;                                                                        //左子树和右子树
 9     BinTreeNode() : leftChild(NULL), rightChild(NULL) {}                                                           //无参构造函数
10     BinTreeNode(T x, BinTreeNode<T> *l = NULL, BinTreeNode<T> *r = NULL) : data(x), leftChild(l), rightChild(r) {} //带默认值的有参构造参数
11 };
12 
13 //先序遍历  PreOrder
14 template<typename T>
15 void PreOrder(BinTreeNode<T>* root){
16     if (root != NULL){
17         std::cout << root->data << std::endl;
18         PreOrder(root->leftChild);
19         PreOrder(root->rightChild);
20     }
21 }
22 
23 //中序遍历  InOrder
24 template<typename T>
25 void InOrder(BinTreeNode<T>* root){
26     if (root != NULL){
27         InOrder(root->leftChild);
28         std::cout << root->data << std::endl;
29         InOrder(root->rightChild);
30     }
31 }
32 
33 //后序遍历  PostOrder
34 template<typename T>
35 void PostOrder(BinTreeNode<T>* root){
36     if (root != NULL){
37         PostOrder(root->leftChild);
38         PostOrder(root->rightChild);
39         std::cout << root->data << std::endl;
40     }
41 }
42 
43 int main()
44 {
45     //构建二叉树
46     BinTreeNode<char>* btA = new BinTreeNode<char>('A');
47     BinTreeNode<char>* btB = new BinTreeNode<char>('B', btA, NULL);
48     BinTreeNode<char>* btC = new BinTreeNode<char>('C');
49     BinTreeNode<char>* btD = new BinTreeNode<char>('D');
50     BinTreeNode<char>* btE = new BinTreeNode<char>('E', btB, btC);
51     BinTreeNode<char>* btF = new BinTreeNode<char>('F', NULL, btD);
52     BinTreeNode<char>* btG = new BinTreeNode<char>('G', btE, btF);
53 
54     //执行先序遍历
55     std::cout << "先序遍历:" << std::endl;
56     PreOrder(btG);
57 
58     //执行中序遍历
59     std::cout << "中序遍历:" << std::endl;
60     InOrder(btG);
61 
62     //执行后序遍历
63     std::cout << "后序遍历:" << std::endl;
64     PostOrder(btG);
65 }

输出结果:

先序遍历:
G
E
B
A
C
F
D
中序遍历:
A
B
E
C
G
F
D
后序遍历:
A
B
C
E
D
F
G

 

标签:结点,遍历,C++,二叉树,BinTreeNode,new,NULL,root
来源: https://www.cnblogs.com/Asp1rant/p/13758027.html