网站挂黑链,做网站需要做什么页面,域名备案官网,温州高端网站定制#includeiostream
#includemath.h
using namespace std;#define MaxSize 100
struct TreeNode {int value;bool isEmpty;//判断该节点是否为空
}t[MaxSize];/**
*定义一个长度位MaxSize的数组#xff0c;按照从上到下#xff0c;
*从左到右的方式依次存储完全…#includeiostream
#includemath.h
using namespace std;#define MaxSize 100
struct TreeNode {int value;bool isEmpty;//判断该节点是否为空
}t[MaxSize];/**
*定义一个长度位MaxSize的数组按照从上到下
*从左到右的方式依次存储完全二叉树的各个节点
*/
//TreeNode t[MaxSize];//初始化二叉树注意从数组下标来进行存储
void InitTreeNode(TreeNode * t) {for (int i 0; i MaxSize; i) {t[i].isEmpty true;}
} /*
i的左孩子——2i
i的右孩子——2i1
i的父节点——【i/2】
i所在的层次——log2的n1向上取整 或者 log2的n向下取整
*///寻找i的左节点的数据
bool FindLeft(TreeNode* t, int size, int value) {if (size * 2 100 - 1||t[size*2].isEmptytrue) {return false;}value t[size*2].value;return true;
}//寻找i的右节点的数据
bool FindRight(TreeNode* t, int size, int value) {if (size * 2 1 100 - 1 || t[size*21].isEmpty true) {return false;}value t[size*21].value;return true;
}//寻找i的父节点的数据
bool FindFather(TreeNode* t, int size, int value) {if ( t[size /2].isEmpty true) {return false;}value t[size/2].value;return true;
}//寻找i的层次
double FindHigh(TreeNode* t, int size) {//i所在的层次——log2的n1向上取整double a 2;double b size 1;double result log(b) / log(a);//进行向上取整result ceil(result);return result;
}int main() {return 0;
}
一、整体功能概述
这段 C 代码主要实现了与完全二叉树相关的一些基本操作包括二叉树节点结构体的定义、二叉树的初始化以及对完全二叉树中节点的左孩子、右孩子、父节点数据的查找还有对节点所在层次的计算等功能。
二、代码结构分析
1. 头文件和命名空间
#includeiostream
#includemath.h
using namespace std;包含了 iostream 头文件用于输入输出操作math.h 头文件用于数学运算如对数运算用于计算节点层次。使用了 using namespace std;这种方式虽然方便但在大型项目中可能会导致命名冲突更推荐按需使用 std:: 限定符。
2. 二叉树节点结构体定义
#define MaxSize 100
struct TreeNode {int value;bool isEmpty;
}t[MaxSize];通过宏定义 MaxSize 确定了二叉树节点数组的最大容量为 100。定义了 TreeNode 结构体包含一个整型的 value 字段用于存储节点的值以及一个布尔型的 isEmpty 字段用于判断该节点是否为空。同时声明了一个名为 t 的 TreeNode 类型数组用于存储完全二叉树的各个节点。
3. 二叉树初始化函数
//初始化二叉树注意从数组下标来进行存储
void InitTreeNode(TreeNode * t) {for (int i 0; i MaxSize; i) {t[i].isEmpty true;}
}该函数接受一个指向 TreeNode 数组的指针 t通过循环将数组中每个节点的 isEmpty 字段设置为 true表示初始时所有节点都为空为后续插入节点等操作做好准备。
4. 查找节点相关函数
查找左节点数据函数
//寻找i的左节点的数据
bool FindLeft(TreeNode* t, int size, int value) {if (size * 2 100 - 1 || t[size * 2].isEmpty true) {return false;}value t[size * 2].value;return true;
}此函数用于查找完全二叉树中指定节点由 size 索引确定的左孩子节点的数据。首先判断左孩子节点的索引是否超出范围通过 size * 2 100 - 1 判断或者左孩子节点是否为空通过 t[size * 2].isEmpty true 判断如果满足其中一个条件则返回 false。否则将左孩子节点的值赋给传入的引用参数 value并返回 true。
查找右节点数据函数
//寻找i的右节点的数据
bool FindRight(TreeNode* t, int size, int value) {if (size * 2 1 100 - 1 || t[size * 2 1].isEmpty true) {return false;}value t[size * 2 1].value;return true;
}与查找左节点数据函数类似用于查找指定节点的右孩子节点的数据。先进行索引范围和节点是否为空的判断满足条件则返回 false否则赋值并返回 true。
查找父节点数据函数
//寻找i的父节点的数据
bool FindFather(TreeNode* t, intsize, int value) {if (t[size / 2].isEmpty true) {return false;}value t[size / 2].value;return true;
}该函数用于查找指定节点的父节点的数据。判断父节点是否为空通过 t[size / 2].isEmpty true 判断为空则返回 false否则赋值并返回 true。
5. 计算节点层次函数
//寻找i的层次
double FindHigh(TreeNode* t, int size) {//i所在的层次——log2的n1向上取整double a 2;double b size 1;double result log(b) / log(a);//进行向上取整result ceil(result);return result;
}此函数用于计算完全二叉树中指定节点由 size 索引确定所在的层次。根据公式先通过对数运算计算出一个初步结果以 2 为底的对数通过换底公式 log(b) / log(a) 实现然后使用 ceil() 函数对结果进行向上取整最后返回该节点所在的层次值。