C++创建二叉树
不知道哪里错了,不行呢
一种可行的方案见C++创建二叉树-后续
#include <iostream>
#include <vector>
using namespace std;
// 二叉树二叉链表结构定义
class BiTNode {
public:
BiTNode()
{
data = '0';
lchild = NULL;
rchild = NULL;
}
public:
char data;
class BiTNode* lchild;
class BiTNode* rchild;
};
// 二叉树的前序输入
void CreateBiTree(BiTNode * BiTree)
{
// 前序输入
char node;
cin >> node;
if (node == '#')
{
BiTree = NULL;
}
else
{
BiTree = new BiTNode;
BiTree->data = node;
CreateBiTree(BiTree->lchild);
CreateBiTree(BiTree->rchild);
}
}
// 前序遍历
void PreorderTraverse(const BiTNode* BiTree)
{
if (BiTree == NULL)
return;
cout << BiTree->data << " ";
PreorderTraverse(BiTree->lchild);
PreorderTraverse(BiTree->rchild);
}
// 中序遍历
void InorderTraverse(const BiTNode* BiTree)
{
if (BiTree == NULL)
return;
InorderTraverse(BiTree->lchild);
cout << BiTree->data << " ";
InorderTraverse(BiTree->rchild);
}
// 后续遍历
void PostorderTraverse(const BiTNode* BiTree)
{
if (BiTree == NULL)
return;
PostorderTraverse(BiTree->lchild);
PostorderTraverse(BiTree->rchild);
cout << BiTree->data << " ";
}
// 层序遍历
/*
void LayerorderTraverse(const BiTNode* BiTree)
{
if (BiTree == NULL)
return;
cout << BiTree->data << " ";
vector<BiTNode*> LayTrav;
if (BiTree->lchild!=NULL)
{
LayTrav.push_back(BiTree->lchild);
}
if (BiTree->rchild!=NULL)
{
LayTrav.push_back(BiTree->rchild);
}
typename vector<BiTNode*>::iterator it = LayTrav.begin();
for ( ; it != LayTrav.end(); ++it)
{
LayerorderTraverse(*it);
}
}*/
int main(int argc, char * argv[])
{
BiTNode* BiTree = NULL;
// 前序输入创建扩展二叉树
CreateBiTree(BiTree);
// 前序遍历
PreorderTraverse(BiTree);
// 中序遍历
InorderTraverse(BiTree);
// 后续遍历
PostorderTraverse(BiTree);
// 层序遍历
//LayerorderTraverse(BiTree);
delete BiTree;
return 0;
}