C++——构造高度平衡的BST,并按层序输出
来源:互联网 发布:圆形相片制作软件 编辑:程序博客网 时间:2024/06/12 01:07
从键盘读入一行数,放入一个vector,因为是要高度平衡,所以要先进行排序,并且将其构造成一高度平衡的BST,并按层序输出。
#include <iostream>#include <vector>#include <queue>using namespace std;struct TreeNode{//树的结构 int val; TreeNode *left; TreeNode *right; TreeNode(int x) :val(x), left(NULL), right(NULL){}};vector<int> readNumber();TreeNode* sortedArrayToBST(vector<int>& nums);TreeNode* dfs(vector<int>& nums, int left, int right);void printTree(TreeNode *root,int depth);vector<int> readNumber(){//从输入流里读入数据存到一个vector里 cout << "please input numbers (EOF to end):" << endl; int num; vector<int> treenum; while (cin >> num){ treenum.push_back(num); } return treenum;}TreeNode* sortedArrayToBST(vector<int>& nums) {//构造高度平衡的二叉排序树 return dfs(nums, 0, nums.size() - 1);//调用函数}TreeNode* dfs(vector<int>& nums, int left, int right){ if (left>right){//如果left比right大,直接返回NULL return NULL; } int mid = (right - left + 1) / 2 + left;//计算中点的索引 TreeNode* root = new TreeNode(nums[mid]);//将中点作为当前的根结点 root->left = dfs(nums, left, mid - 1);//递归调用左子数组和右子数组 root->right = dfs(nums, mid + 1, right); return root;}void printTree(TreeNode* root){//即是二叉树的层序遍历 queue<TreeNode *> q;//利用队列的先进先出规则,层序从上往下从左往右将结点入队列 TreeNode *ptr = NULL;//用来指向队列的第一个元素 q.push(root);//将根结点入队列 while (!q.empty()){//如果此时队列不为空 ptr = q.front();//ptr指向队列的第一个元素 q.pop();//将队列中第一个结点出队列,因为这里的队列q和ptr存的都是指向树结点的指针 cout << ptr->val << " ";//打印结点 所以在打印前pop打印和pop后打印都无所谓 if (ptr->left != NULL){//如果左结点不为NULL,左结点入队列 q.push(ptr->left); } if (ptr->right != NULL){//如果右结点不为NULL,右结点入队列 q.push(ptr->right); } }}int main(){ vector<int> nums = readNumber(); sort(nums.begin(), nums.end()); TreeNode* root = sortedArrayToBST(nums); cout << "The BST is : "; printTree(root); cout << endl; return 0;}
输出结果:
0 0
- C++——构造高度平衡的BST,并按层序输出
- 【BST】把两棵BST合并成一棵高度平衡的BST
- 程序员面试金典——高度最小的BST
- 高度最小的BST
- 高度最小的BST
- 高度最小的BST
- 最小高度的BST
- 高度最小的BST
- 将已排好序的数组转换成高度平衡的二叉搜索树(BST)
- 高度平衡的二叉树——AVLTree
- 《C算法》笔记11:BST再平衡
- 程序员面试金典:高度最小的BST、输出单层结点
- BST的生成,后续输出
- 高度平衡的二叉树
- 高度平衡二叉树——AVL树
- 高度平衡
- bst平衡树
- 平衡二叉树的构造
- 谁是许式伟
- 求补码的简便方法及byte溢出问题
- 在atom中手动创建maven项目
- apach zeppelin中使用spark streaming:基本功能
- SpringBoot 开发使用thymeleaf模板开发html页面
- C++——构造高度平衡的BST,并按层序输出
- Java解惑学习有感(七)---更多的类之谜
- DataSet和XML格式间的相互转换 (转)
- koa2设置ejs为模板引擎,但是最终文件是.html
- plsql下面 没有connect as选择项
- WebStorm 激活码
- 每日打卡 2017.05.01 尺取法
- PPM / PGM / PBM图像文件
- acm杭电HDU5245 Joyful 概率问题 期望值(2015上海邀请赛)