sicily 计算二叉查找树的高度 期末考试题
2017-01-07 11:48
239 查看
题目
Description
给定一个二叉查找树,要求计算其高度,每个二叉查找树将给出先序与中序的遍历。例如:一个二叉查找树其先序遍历为:16, 10, 4, 15, 23 ; 中序遍历为 4, 10, 15, 16, 23,则其高度为2(假定空树高度为-1,只有根节点的数高度为0)
Input
第一行输入测试用例个数。对于每个测试用例,
第一行是节点个数n,第二行是key值的先序遍历,第三行是key值的中序遍历
Output
对于每个测试用例,用一行输出树的高度Sample Input
Copy sample input to clipboard2
3
4 5 6
4 5 6
5
6 4 8 9 10
4 6 8 9 10
Sample Output
2
3
思考
1、本题考了两个点,一是通过先序中序构造树,第二个是计算树的高度。代码
#include <iostream> #include <vector> #include <iterator> #include <algorithm> using namespace std; struct treeNode { int data; treeNode* left; treeNode* right; treeNode(int _data) : data(_data), left(NULL), right(NULL) {} }; treeNode* buildTreeByPreInOrder(vector<int>preOrder, vector<int>inOrder, int preS, int preE, int inS, int inE) { if (preS < preE && inS < inE) { treeNode* newTree = new treeNode(preOrder[preS]); vector<int>::iterator mid = find(inOrder.begin() + inS,inOrder.begin() + inE, preOrder[preS]); int span = mid - (inOrder.begin() + inS); newTree->left = buildTreeByPreInOrder(preOrder, inOrder, preS + 1, preS + 1 + span, inS, inS + span); newTree->right = buildTreeByPreInOrder(preOrder, inOrder, preS + span + 1, preE, inS + span + 1, inE); return newTree; } return NULL; } int BT_depth(treeNode* root) { if (root == NULL) { return -1; } else { int m = BT_depth(root->left); int n = BT_depth(root->right); return (m > n) ? (m+1) : (n+1); } } int main(int argc, const char * argv[]) { int test_case; cin >> test_case; int n; vector<int> inorderV, preorderV; int i_temp; while (test_case--) { inorderV.clear(); preorderV.clear(); cin >> n; for (int i = 0; i < n; i++) { cin >> i_temp; preorderV.push_back(i_temp); } for (int i = 0; i < n; i++) { cin >> i_temp; inorderV.push_back(i_temp); } treeNode* root = buildTreeByPreInOrder(preorderV, inorderV, 0, preorderV.size(), 0, inorderV.size()); cout << BT_depth(root) << endl; } return 0; }
相关文章推荐
- #sicily#1003.计算二叉查找树的高度
- 1002. 计算二叉查找树的高度
- 二叉查找树的结点插入,查找,删除,计算二叉树的高度
- [C++日常小题] 计算二叉查找树的高度
- 计算listview高度
- iOS 动态计算UITableViewCell 高度 以及计算UILable 高度 自定义Cell
- 动态计算UITableViewCell高度详解
- 根据Label的文字内容动态计算Label高度
- scrollView和ListView的冲突,无法计算高度
- 八,iOS当UILabel文字不固定时计算label的高度
- 根据文字计算cell的高度
- UITableViewCell 高度计算从混沌初始到天地交泰
- less常用样式集,清除浮动、背景自适应、背景渐变、圆角、内外阴影、高度宽度计算。
- 动态设置gridview的高度计算方法
- Auto Layout 使用心得(五)—— 根据文字、图片自动计算 UITableViewCell 高度
- ScrollView与ListView合用(正确计算Listview的高度)的问题解决
- iOS开发 CoreText中的高度计算问题
- UITableView介绍 之 AutoLayout下复杂cell的高度计算
- 动态计算UITableViewCell高度详解
- Android 状态栏、titlebar的高度计算