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