以下图为例,使用#号法创建二叉树。先序遍历输入的顺序为:ABD#G##E##CF###, 创建完成后输出,输出顺序为:ABDGECF
定义树的结构
//定义树的结构
typedef struct BiNode {
char data; //结点数据
struct BiNode *lchild, *rchild; //左右子树指针
} BiNode, *BiTree;
先序遍历创建二叉树
void PreCreateTree(BiTree &T) {
char ch;
cin >> ch;
//判断是否为#
if (ch != '#') {
T = (BiNode *)malloc(sizeof(BiNode));
T->data = ch;
PreCreateTree(T->lchild); //创建左子树
PreCreateTree(T->rchild); //创建右子树
}
//是#,停止创建,将T设置为NULL
else {
T = NULL;
}
}
先序遍历
void PreOrder(BiTree T) {
if (T != NULL) {
cout << T->data; //首先访问根结点
PreOrder(T->lchild); //再访问左子树
PreOrder(T->rchild); //再访问右子树
}
}
运行结果
完整代码
#include <iostream>
using namespace std;
//定义树的结构
typedef struct BiNode {
char data; //结点数据
struct BiNode *lchild, *rchild; //左右子树指针
} BiNode, *BiTree;
//先序遍历创建二叉树
void PreCreateTree(BiTree &T) {
char ch;
cin >> ch;
//判断是否为#
if (ch != '#') {
T = (BiNode *)malloc(sizeof(BiNode));
T->data = ch;
PreCreateTree(T->lchild); //创建左子树
PreCreateTree(T->rchild); //创建右子树
}
//是#,停止创建,将T设置为NULL
else {
T = NULL;
}
}
//先序遍历 根 左 右
void PreOrder(BiTree T) {
if (T != NULL) {
cout << T->data; //首先访问根结点
PreOrder(T->lchild); //再访问左子树
PreOrder(T->rchild); //再访问右子树
}
}
//使用#号法创建二叉树
int main(int argc, char const *argv[]) {
BiTree T;
cout << "输入结点:" << endl;
PreCreateTree(T);
cout << "先序遍历输出顺序为:" << endl;
PreOrder(T);
return 0;
}
|