C++实现先序创建二叉树,并用递归和非递归两种方式二叉树中序遍历
这是数据结构课堂留下的一个作业:
题目是:按先序次序输入二叉树中的结点的值(data为字符类型),以’#'表示空字符,创建二叉链表示二叉树。函数原型如下:
void CreateBiTree(BiTree *T);//创建二叉树函数
void InOrderTraverse(BiTree T); //利用栈以非递归的方式实现中序遍历上述二叉树
二叉链表的定义如下:
typedef struct BiTNode{
char data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree; //这里将BiTNode和BiTree声明为struct BiTNode和struct BiTNode*的别名
代码运行实例:
于是按照题目的要求写了第一个版本的代码(问题主要出现在二叉树的创建上,这里先不贴中序遍历的代码):
#include<iostream>
#include<malloc.h>
using namespace std;
//定义二叉链表的结构体
typedef struct BiTNode {
char data; //用来存储数据
struct BiTNode* lchild, * rchild; //左右子树
}BiTNode, * BiTree;
//函数声明
void CreateBiTree(BiTree *T);
int main() {
cout << "请输入建立二叉链表的序列:" << endl;
BiTree T = 0; //初始化为空指针
CreateBiTree(&T);
//cout << T->data;
return 0;
}
void CreateBiTree(BiTree *T) {