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
复制代码

 

posted @   Asp1rant  阅读(533)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示