📄 main6-1.cpp
字号:
// main6-1.cpp 检验bo6-1.cpp的主程序,利用条件编译选择数据类型为char或int
//#define CHAR 1 // 字符型
#define CHAR 0 // 整型(二者选一)
#include<iostream>
using namespace std;
#include"c1.h"
#include"func6-1.cpp" // 利用条件编译,在主程序中选择结点的类型,访问树结点的函数
#include"c6-1.h" // 二叉树的顺序存储结构
#include"bo6-1.cpp" // 二叉树顺序存储结构的基本操作
void main()
{
bool i;
int j;
position p;
#if CHAR
char e1,e2,e3,e4 ;
SqBiTree<char> t,s;
#else
int e1,e2,e3,e4 ;
SqBiTree<int> t,s;
#endif
t.CreateBiTree(); // 建立二叉树t
cout<<"建立二叉树后,树空否?"<<t.BiTreeEmpty()<<"(1:是 0:否)。树的深度="<<t.BiTreeDepth()<<endl;
i=t.Root(e1); // 将二叉树t的根的值赋给e1
if(i) // 二叉树t非空
cout<<"二叉树的根为"<<e1;
else
cout<<"树空,无根。\n";
cout<<"层序遍历二叉树:\n";
t.LevelOrderTraverse(visit); // 层序遍历二叉树t
cout<<"中序遍历二叉树:\n";
t.InOrderTraverse(visit); // 中序遍历二叉树t
cout<<"后序遍历二叉树:\n";
t.PostOrderTraverse(visit); // 后序遍历二叉树t
cout<<"请输入待修改结点的层号 本层序号:";
cin>>p.level>>p.order;
e1=t.Value(p); // 将二叉树t中位置p的结点的值赋给e1
cout<<"待修改结点的原值为:"<<e1<<","<<"请输入新值:";
cin>>e2;
t.Assign(p,e2); // 将e2的值赋给二叉树t中位置p的结点
cout<<"先序遍历二叉树:\n";
t.PreOrderTraverse(visit); // 先序遍历二叉树t
cout<<"结点"<<e2<<"的双亲为"<<t.Parent(e2)<<"左右孩子分别为"<<t.LeftChild(e2)<<","<<t.RightChild(e2)<<",";
cout<<"左右兄弟分别为"<<t.LeftSibling(e2)<<","<<t.RightSibling(e2)<<endl;
cout<<"建立右子树为空的树s:\n";
s.CreateBiTree(); // 建立二叉树s
cout<<"树s插到树t中,输入树t中树s的双亲结点,s为左(0)或右(1)子树:";
cin>>e3>>j;
InsertChild(t,e3,j,s);// 将树s插到树t中,结点e3作为树s的双亲结点,根据j的值确定树s是e3的左或右子树
cout<<"层序遍历二叉树:\n";
t.LevelOrderTraverse(visit); // 层序遍历二叉树t
t.Print(); // 逐层、按本层序号输出二叉树t
cout<<"删除子树,请输入其根结点的双亲的层号 本层序号 其为双亲的左(0)或右(1)子树:";
cin>>p.level>>p.order>>j;
t.DeleteChild(p,j); // 删除二叉树t中位置p结点的左(j=0)或右(j=1)子树
t.Print(); // 逐层、按本层序号输出二叉树t
t.ClearBiTree(); // 清空二叉树T
cout<<"清空二叉树后,树空否?"<<t.BiTreeEmpty()<<"(1:是 0:否)。树的深度="<<t.BiTreeDepth()<<endl;
i=t.Root(e4); // 将二叉树t的根的值赋给e4
if(i) // 二叉树t非空
cout<<"二叉树的根为"<<e4;
else // 二叉树t为空
cout<<"树空,无根。\n";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -