C++二叉排序树之查找结点
来源:互联网 发布:centos nat 上网 编辑:程序博客网 时间:2024/04/25 15:32
#include <iostream>using namespace std;class TreeNode {public: int data; TreeNode *LeftChild; TreeNode *RightChild; TreeNode() :LeftChild(NULL), RightChild(NULL) {}};class BiSortTree {private: TreeNode *root; int *info; int size; int loc; TreeNode *CreateTree(TreeNode *p); TreeNode* InsertNode(TreeNode *p, int d); TreeNode* Search(TreeNode *p, int d); void Delete(int d);public: BiSortTree(int s, int arr[]); void CreateBiSortTree(); void InsertBiSortTree(int d); void InOder(TreeNode *p); void InOderTree(); void SearchData(int d); void DeleteData(int d);};BiSortTree::BiSortTree(int s, int arr[]) { loc = 1; size = s; info = new int[size]; for (int i = 0; i < size; i++) info[i] = arr[i];}void BiSortTree::CreateBiSortTree() { root = new TreeNode(); if (size) root->data = info[0]; CreateTree(root);}TreeNode *BiSortTree::CreateTree(TreeNode *p) { if (loc < size) { if (p->data > info[loc]) { if (!p->LeftChild) { p->LeftChild = new TreeNode(); p->LeftChild->data = info[loc++]; } else CreateTree(p->LeftChild); } else if (p->data < info[loc]) { if (!p->RightChild) { p->RightChild = new TreeNode(); p->RightChild->data = info[loc++]; } else CreateTree(p->RightChild); } CreateTree(root); } return NULL;}void BiSortTree::InOderTree() { InOder(root);}void BiSortTree::InOder(TreeNode *p) { if (p) { InOder(p->LeftChild); cout << p->data << ' '; InOder(p->RightChild); }}void BiSortTree::SearchData(int d) { TreeNode *t = Search(root, d); if (t) cout << t->data; else cout << "NOT FOUND";}TreeNode* BiSortTree::Search(TreeNode *p, int d) { if (p) { if (p->data == d) return p; if (p->data > d) return Search(p->LeftChild, d); else return Search(p->RightChild, d); } return NULL;}int main() { int t; cin >> t; while (t--) { int s; cin >> s; int *arr = new int[s]; for (int i = 0; i < s; i++) cin >> arr[i]; BiSortTree sTree(s, arr); sTree.CreateBiSortTree(); sTree.InOderTree(); cout << endl; int m; cin >> m; while (m--) { int d; cin >> d; sTree.SearchData(d); cout<<endl; } } return 0;}
计算查找次数
#include <iostream>using namespace std;class TreeNode {public: int data; TreeNode *LeftChild; TreeNode *RightChild; TreeNode() :LeftChild(NULL), RightChild(NULL) {}};class BiSortTree {private: TreeNode *root; int *info; int size; int loc; int count; TreeNode *CreateTree(TreeNode *p); TreeNode* InsertNode(TreeNode *p, int d); int Search(TreeNode *p, int d); void Delete(int d);public: BiSortTree(int s, int arr[]); void CreateBiSortTree(); void InsertBiSortTree(int d); void InOder(TreeNode *p); void InOderTree(); void SearchData(int d); void DeleteData(int d);};BiSortTree::BiSortTree(int s, int arr[]) { loc = 1; count = 0; size = s; info = new int[size]; for (int i = 0; i < size; i++) info[i] = arr[i];}void BiSortTree::CreateBiSortTree() { root = new TreeNode(); if (size) root->data = info[0]; CreateTree(root);}TreeNode *BiSortTree::CreateTree(TreeNode *p) { if (loc < size) { if (p->data > info[loc]) { if (!p->LeftChild) { p->LeftChild = new TreeNode(); p->LeftChild->data = info[loc++]; } else CreateTree(p->LeftChild); } else if (p->data < info[loc]) { if (!p->RightChild) { p->RightChild = new TreeNode(); p->RightChild->data = info[loc++]; } else CreateTree(p->RightChild); } CreateTree(root); } return NULL;}void BiSortTree::InOderTree() { InOder(root);}void BiSortTree::InOder(TreeNode *p) { if (p) { InOder(p->LeftChild); cout << p->data << ' '; InOder(p->RightChild); }}void BiSortTree::SearchData(int d) { count = 0; cout << Search(root, d);}int BiSortTree::Search(TreeNode *p, int d) { if (!p) { count = -1; return count; } if (p->data == d) return ++count; if (p->data > d) Search(p->LeftChild, d); else Search(p->RightChild, d); if (count > 0) return ++count; return count;}int main() { int t; cin >> t; while (t--) { int s; cin >> s; int *arr = new int[s]; for (int i = 0; i < s; i++) cin >> arr[i]; BiSortTree sTree(s, arr); sTree.CreateBiSortTree(); sTree.InOderTree(); cout << endl; int m; cin >> m; while (m--) { int d; cin >> d; sTree.SearchData(d); cout<<endl; } } //system("pause"); return 0;}/*InPut1622 33 55 66 11 44711223344556677*//*OutPut 查找次数11 22 33 44 55 66 212434-1*/
0 0
- C++二叉排序树之查找结点
- C++二叉排序树之删除结点
- 动态查找之二叉排序树
- 查找系列之二叉排序树
- 查找之二:二叉排序树
- 查找算法之二叉排序树
- 动态查找之-二叉排序树
- 查找之二叉排序树
- 二叉排序树之查找算法
- 查找算法之二叉排序树查找
- 树表查找之二叉排序树
- 动态查找表之二叉排序树
- 树表查找之二叉排序树
- 查找算法三之二叉排序树
- 动态查找表之二叉排序树
- 第七章:查找之二叉排序树
- 二叉排序树的查找与遍历C版
- C++——算法基础之动态查找表1——二叉排序树
- 命令行看数据文件
- 大数据Hive-日志分析系统流程
- Android Studio解决导入项目非常慢的问题
- Opengl 光栅化 渲染管线 着色器 名词解释
- Chapter 1: Why Do DevOps?
- C++二叉排序树之查找结点
- leetcode-344. Reverse String
- 树的遍历
- fastJson与springmvc结合,在spring-mvc.xml中的配置,解决415报错
- 六款堪称神器的网站
- Android Studio解决导入项目非常慢的问题
- SharedPreference 你的使用姿势对吗?
- 8 gradle 命令学习
- Gradle离线配置