数据结构 c++
二叉树的基本操作
建立一棵二叉树,试编程实现二叉树的如下基本操作:
1. 按先序序列构造一棵二叉链表表示的二叉树T;
2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出结点的遍历序列;
3. 求二叉树的深度/结点数目/叶结点数目;
4. 将二叉树每个结点的左右子树交换位置。
[主要实验代码步骤和结果]
定义二叉树树:
typedef struct BiTNode
{
char data;
struct BiTNode* lchild, * rchild;
};
创建二叉树(先序创建 递归):
BiTNode* CreateTree()//先序创建二叉树
{
BiTNode* T;
char x;
cin >> x;
if (x == '@')//‘@’表示子树为空。
T = NULL;
else
{
T = new BiTNode;
T->data = x;
cout << "输入左孩子:";
T->lchild = CreateTree();
cout << "输入右孩子:";
T->rchild = CreateTree();
}
return T;}
中序遍历二叉树(递归)
主要代码:
void InOrderDisplay(BiTNode* T)//中序遍历(递归)
{
if (T)
{InOrderDisplay(T->lchild);//中序遍历左子树(递归)
cout << T->data << setw(4);//访问根节点
InOrderDisplay(T->rchild);//右子树
}}
层次遍历(利用队链的入栈和出栈实现树的层次遍历)
主要代码:typedef struct QNode
{BiTNode *data;
struct QNode* next;
}QNode, * QueuePtr;
typedef struct LinkQueue
{QueuePtr front;
QueuePtr rear;
};
void InitQueue(LinkQueue& Q)//初始化栈链。
{Q.front = Q.rear = new QNode;
Q.front->next = NULL;
}
void EnQueue(LinkQueue& Q, BiTNode* e)//入栈。
{QNode* p = new QNode;
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
}
BiTNode *DeQueue(LinkQueue& Q, BiTNode *e)//出栈。
{if (Q.front == Q.rear)
return NULL;
QNode* p = new QNode;
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
Q.rear = Q.front;
delete p;return e;}//以上为队列的创建。
void LevelDisplay(BiTNode* T)//层序遍历
{BiTNode* t = new BiTNode;
BiTNode* e = new BiTNode;
LinkQueue Q;
InitQueue(Q);
EnQueue(Q, T);
while (t = DeQueue(Q, e))
{cout << t->data;
if (t->lchild != NULL)
{EnQueue(Q, t->lchild);}
if (t->rchild != NULL)
{EnQueue(Q, t->rchild);
}}}
...全文
相关推荐
顺序表 c++ cpp 数据结构 作业
顺序表 c++ cpp 数据结构 作业 顺序表 c++ cpp 数据结构 作业
[C语言复杂数据结构 cpp] —— 深入探究C++的高级数据结构
hash函数用于将键映射为索引,put函数用于向哈希表中插入键值对,get函数用于获取指定键对应的值,remove函数则用于删除指定键对应的键值对。需要注意的是,在实现insert和remove函数时,我们使用了广度优先搜索的算法来遍历树的所有节点。当然,这只是数据结构的冰山一角,希望本文的内容能够为你打开更加广阔的编程视野,激发你的编程激情。insert函数用于向链表中插入新的节点,remove函数用于删除链表中已有的节点,print函数则用于输出整个链表中的所有数据。
[C++数据结构 struct cpp]——深入理解 C++ 中的结构体
上述代码定义了一个名为 “Employee” 的结构体,其中包含两个成员变量: “name” 和 “age”,以及一个成员函数 “introduce”。结构体是 C++ 中最常用的数据结构之一,它允许我们将不同类型的数据组合到一个单独的对象中。上述代码定义了一个名为 “Person” 的结构体,其中包含两个成员变量: “name” 和 “age”,分别代表人名和年龄。这里我们创建了一个名为 “john” 的 “Person” 对象,并分别赋值给其成员变量 “name” 和 “age”。
顺序表合并 c++ cpp 数据结构 作业
顺序表合并 c++ cpp 数据结构 作业 顺序表合并 c++ cpp 数据结构 作业
链表 实现 c++ cpp 数据结构 作业
链表 实现 c++ cpp 数据结构 作业 链表 实现 c++ cpp 数据结构 作业


