|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdlib.h>
#include<iostream>
using namespace std;
struct TreeNode {
int Element; //定义根结点
struct TreeNode* Left; //左孩子指针
struct TreeNode* Right; //右孩子指针
};
// 问题1: 简述该函数的功能
TreeNode* Insert(int X, TreeNode* T) {
if (T == NULL) {
T = (TreeNode*)malloc(sizeof(struct TreeNode)); //申请新结点
if (T == NULL)
exit(-1); //退出
else {
T->Element = X;
T->Left = NULL;
T->Right = NULL;
}
}
// 问题2:下面3行的作用?
else if (X < T->Element) {
T->Left = Insert(X, T->Left); //
}
// 问题3:下面3行的作用?
else if (X > T->Element) {
T->Right = Insert(X, T->Right);
}
return T; // 返回插入元素的地址
}
void TraversePre(TreeNode* T) {
if (T == NULL)
return;
else {
printf("%d ", T->Element);
TraversePre(T->Left);
TraversePre(T->Right);
}
}// 先序
void TraverseMid(TreeNode* T) {
if (T == NULL)
return;
else {
printf("%d ", T->Left);
TraversePre(T->Element);
TraversePre(T->Right);
}// 中序
void TraverseBack(TreeNode* T) {
if (T == NULL)
return;
else {
printf("%d ", T->Left);
TraversePre(T->Right);
TraversePre(T->Element);
}// 后序
TreeNode* Find(int X, TreeNode* T) {
}// 问题4:查找:求大佬教教
void main()
{
int seq[10] = { 1,2,3,4,5,6,7,8,9,10 }; // 输入序列
TreeNode* T = NULL; //初始化
// 问题5:下面这几句话产生的效果是什么?
for (int i = 0; i < 10; i++) {
T = Insert(seq[i], T);
}
printf("\n先序遍历输出序列为:\n"); // 实现二叉树的先序遍历
TraversePre(T); // 先编子程序,然后在这里调用子程序,实现二叉树的中序遍历
printf("\n中序遍历输出序列为:\n");
TraverseMid(T); // 先编子程序,然后在这里调用子程序,实现二叉树的后序遍历
printf("\n后序遍历输出序列为:\n");
TraverseBack(T);
// Find函数实现的功能是:在上述二叉树T中查找某个数X,如果查找成功,则返回X的地址(16进制即可);否则,返回NULL;
int X = 41;
TreeNode* pos = NULL;
pos = Find(X, T);
if (pos != NULL)
printf("\n%d的位置为 %x, 对应数据为%d\n", X, pos, pos->Element);
else
printf("\n%d未找到.\n", X);
}
|
|