Complete Binary Search Tree(c++)
本题目来自 PTA的,Complete Binary Search Tree
题目详细信息本文不再给出,可以点击以上链接。
因为题目要求,首先输入二叉树的结点个数,再输入每个结点对应的值,建立二叉树,既是二叉搜索树,又是完全二叉树。
整体思路
- 根据输入的结点数,建立完全二叉树;
- 将节点数值放在数组中,从小到大排序;
- 根据根左儿子的结点数(左儿子的值都比根的值小,右儿子的值都比根的值大,所以,例如左儿子有6个结点,则根的值为数组中第7大的值),选取数组中对应的值,放入其中,然后更新左儿子数组,右儿子数组,递归将值放入其中。
代码如下
#include <iostream>
#define MAXSIZE 2000
using namespace std;
typedef struct LNode* List;
struct LNode
{
int data;
List left;
List right;
};
List BuideTree(int); //构建具有num个元素的完全二叉树
int* Sort(int[], int); //将数组num[]按从小到大排序
List FindFirstNullPosition(List); //顺序找到第一个空位置
int FindNumberOfTree(List); //计算树的结点数
List PutNumInTree(List, int[], int); //将数据放入结点中
int* SortNum(int[], int, int, int); //截取数组的一部分
int* LevelorderTraversal(List, int); //层次排列
int main()
{
int numOfElements, num;
cin >> numOfElements; //树的结点数
int nums[numOfElements];
for (int i = 0; i < numOfElements; ++i) //将数结点的数值放入数组
{
cin >> num;
nums[i] = num;
}
int* ptrNum, *ptrTest, *numQueue;
List tree;
tree = BuideTree(numOfElements); //建立完全二叉树
ptrNum = Sort(nums, numOfElements); //数组从小到大排序
tree = PutNumInTree(tree,ptrNum,numOfElements); //将有序数组放入建好的树
numQueue = LevelorderTraversal(tree, numOfElements