//基于前序、中序、后序序列构造二叉树
//需求:
//1、任意输入前序 + 中序序列或者中序 + 后序序列,生成二叉树
//3、利用打印二叉树功能显示二叉树的逐步构造过程
//鼓励使用自上而下的二叉树显示(加分项)
//5、如使用命令行程序,请务必学习使用EGE(xege.org) / SFML(www.sfml - dev.org / download / sfml / 2.5.1 / )库进行可视化
//请使用三叉链表,在构造链表的过程中同步更新每个节点的parent指针
////输入两个节点值 找到共同祖先
//2、检测输入的前序,中序,后续序列的有效性 例如当用户输入错误的序列时,程序应该有错误提示////构造二叉树至出错前状态
#include<string.h>
#include"BT.h"
using namespace std;
int main()
{
int ch = 1;
char temp1[99] = "d", temp2[99] = "e";
do {
system("cls");
cout << "1——以前序和中序创建二叉树\n";
cout << "2——以中序和后序创建二叉树\n";
cout << "0——退出\n";
cin >> ch;
switch (ch) {
case 1:
{//dbeafcg fcgadbe ebdafcg dbeagcf
//char a[99] = "abdecfg"; char b[99] = "dbeafcg";
char a[99];
char b[99];
int i = 0;
cin.ignore();
cout << "请输入前序序列的值\n";
cin.getline(a, 99);
cout << "请输入中序序列的值\n";
cin.getline(b, 99);
if (errorDetectionVVR(a, b, strlen(a)))cout << "序列正确\n";
tempBTNode = NULL;
myBT.creatreeVVR(a, b, strlen(b), myBTNode, tempBTNode, 350, 22, 350, 22, 1);
cout << "请输入两个节点值找他们的共同祖先\n";
cout << "请输入第一个节点的值\n";
cin >> temp1;
cout << "请输入第二个节点的值\n";
cin >> temp2;
//char *trial = (char *)myBT.SearchNode(myBTNode, *temp1);
//cout << *trial << endl; //输出地址中的值
cout << "共同祖先为:\n";
cout << myBT.comparent(myBT.SearchNode(myBTNode, *temp1), myBT.SearchNode(myBTNode, *temp2));
system("pause");
cleardevice();
Sleep(100);//Sleep(200);
closegraph(); //关闭图形界面
break;
}
case 2:
{
//char a[99] = "dbeafcg"; char b[99] = "debfgca";
char a[99];
char b[99];
int i = 0;
cin.ignore();
cout << "请输入中序序列的值\n";
cin.getline(a, 99);
cout << "请输入后序序列的值\n";
cin.getline(b, 99);
if (errorDetectionLVV(a, b, strlen(a)))cout << "序列正确\n";
tempBTNode = NULL;
myBT.creatreeLVV(a, b, strlen(b), myBTNode, tempBTNode, 350, 22, 350, 22, 1);
cout << "请输入两个节点值找他们的共同祖先\n";
cout << "请输入第一个节点的值\n";
cin >> temp1;
cout << "请输入第二个节点的值\n";
cin >> temp2;
cout << "共同祖先为:\n";
cout << myBT.comparent(myBT.SearchNode(myBTNode, *temp1), myBT.SearchNode(myBTNode, *temp2));
system("pause");
cleardevice();
Sleep(100);//Sleep(200);
closegraph();
break;
}
default: break;
}
//cout << "\n所构造的树的前序序列为\n";
//myBT.PrintVLR(myBTNode);
//cout << "\n所构造的树的中序序列为\n";
//myBT.PrintLVR(myBTNode);
//cout << "\n所构造的树的后序序列为\n";
//myBT.PrintLRV(myBTNode); cout << endl;
//system("pause");
} while (ch != 0);
return 0;
}
//getch(); //暂停,等待键盘按键
//closegraph(); //关闭图形界面
ege库基于前中后序动态建立二叉树源码(内附ege)
5星 · 超过95%的资源 需积分: 10 151 浏览量
2022-10-09
22:01:59
上传
评论 1
收藏 592KB RAR 举报
Zerin&
- 粉丝: 24
- 资源: 3
最新资源
- 传统网页UI设计在移动应用开发中的应用研究.pdf
- 基于pytorch实现BERT+BiLSTM+CRF实现中文命名实体识别源码.zip
- 校园帮项目,毕业设计/课程设计/javaWeb/SSM
- C++ plotting library,matplotlib-cpp-master.zip
- 案例源码matplotlib-examples-master.zip
- 基于JavaScript 实现的KMP 算法
- 基于C++实现二叉树的创建,遍历,添加,查找与删除
- 基于C语言实现二叉树的基本操作
- 毕业设计基于STM32的测量温度与压力的数据处理设计C语言完整源码+论文.zip
- 基于MATLAB的PCA算法人脸识别项目源码+GUI界面+说明文档.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论1