C++实现二叉树的创建与中序遍历
#include<iostream>
#include"string"
using namespace std;
typedef char datatype;//方便后期修改数据类型
class BinTreeNode//定义二叉树节点的类
{
public:
BinTreeNode* lchild;
BinTreeNode* rchild;
datatype value;
//不知道为什么要初始化,而且后面还影响了我的判断,所以将初始化注释了;
/*BinTreeNode()
{
lchild = nullptr;
rchild = nullptr;
}*/
};
class BinaryTree//定义二叉树的类
{
public:
BinTreeNode* root;//定义二叉树的根节点;
BinaryTree() { root = nullptr; }//构造函数初始化根节点
BinTreeNode* CreatTree();//创建二叉树
void MidorderTraverse(BinTreeNode* roo);//中序遍历二叉树
};
/*c语言的创建函数的参数都是传入一个根节点指针的引用root,返回值是void,到c++这写创建函数我是很懵逼的,因为根节点就是二叉树树类的数据成员,只能先参考书上写的,思路是创建一颗二叉树,返回二叉树根节点的指针*/
BinTreeNode* BinaryTree::CreatTree()
{
BinTreeNode* T;
char ch;
ch=getchar();
if (ch == '#')
T = nullptr;
else
{
T = new BinTreeNode;
T->value = ch;
T->lchild = CreatTree();
T->rchild = CreatTree();
}
return T;
}
void BinaryTree::MidorderTraverse(BinTreeNode *roo)
{
if (roo != nullptr)
{
MidorderTraverse(roo->lchild);
cout << roo->value;
MidorderTraverse(roo->rchild);
}
}
![这是输入,以及中序遍历的输出结果](https://img-blog.csdnimg.cn/bbf14425e0394a9b8cb764172b9c4786.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAbTBfNDY5Mjk4Nzg=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
**要注意的一下**:在我开始输入的时候,我的输入是AB#CDE#;程序总是无法中序遍历;在我开始看来一个叶子节点在初始化后左右指针就是空了,所以没有加入叶子节点的两个##,导致建立二叉树总是失败;
**最后希望能帮助到你**继续努力