数据结构基础---Binary Search Tree
/// Binary Search Tree - Implemenation in C++
/// Simple program to create a BST of integers and search an element in it
#include<iostream>
#include "cstdio"
#include "queue"
using namespace std;
///Definition of Node for Binary search tree
struct BstNode {
int data;
BstNode* left;
BstNode* right;
};
bool fist=true;
/// Function to create a new Node in heap
BstNode* GetNewNode(int data) {
BstNode* newNode = new BstNode();
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
} ///To insert data in BST, returns address of root node
BstNode* Insert(BstNode* root,int data) {
if(root == NULL) { // empty tree
root = GetNewNode(data);
} else if(data <= root->data) {
root->left = Insert(root->left,data);
} else {
root->right = Insert(root->right,data);
}
return root;
}
///To search an element in BST, returns true if element is found
bool Search(BstNode* root,int data) {
if(root == NULL) {
return false;
}
else if(root->data == data) {
return true;
}
else if(data <= root->data) {
return Search(root->left,data);
}
else {
return Search(root->right,data);
}
} ///PreOrder Display
void PreOrder(BstNode *root)
{
if(root!=NULL){
PreOrder(root->left);
PreOrder(root->right);
printf("%d ",root->data);
}
}
///PostOrder Display
void PostOrder(BstNode *root)
{
if(root!=NULL){
printf("%d ",root->data);
PostOrder(root->left);
PostOrder(root->right);
}
} ///InOrder Display
void InOrder(BstNode *root)
{
if(root!=NULL){
InOrder(root->left);
printf("%d ",root->data);
InOrder(root->right);
}
} ///LevelOrder Display
void LevelOrder(BstNode *root)
{
queue<BstNode *>Q;
while(!Q.empty())Q.pop();
Q.push(root);
while(!Q.empty())
{
root=Q.front();
Q.pop();
if(fist==false)
{
cout<<root->data;
fist=true;
}
else
{
cout<<" "<<root->data;
}
if(root->left!=NULL)Q.push(root->left);
if(root->right!=NULL)Q.push(root->right);
}
cout<<endl;
} ///################### Test ############################
int main() {
BstNode* root = NULL; // Creating an empty tree, root is to store the address of the root node
/*Code to test the logic*/
root = Insert(root,);
root = Insert(root,);
root = Insert(root,);
root = Insert(root,);
root = Insert(root,);
root = Insert(root,);
cout<<"PreOrder: ";
PreOrder(root);
cout<<endl;
cout<<"InOrder(从小到大): ";
InOrder(root);
cout<<endl;
cout<<"PostOrder: ";
PostOrder(root);
cout<<endl;
cout<<"LevelOrder: ";
LevelOrder(root);
cout<<endl; int number;
cout<<"Enter number be searched\n";
cin>>number; if(Search(root,number) == true) cout<<"Found\n";
else cout<<"Not Found\n"; return ;
}
数据结构基础---Binary Search Tree的更多相关文章
- 数据结构之Binary Search Tree (Java)
二叉查找树简介 二叉查找树(Binary Search Tree), 也成二叉搜索树.有序二叉树(ordered binary tree).排序二叉树(sorted binary tree), 是指一 ...
- 算法与数据结构基础 - 二叉查找树(Binary Search Tree)
二叉查找树基础 二叉查找树(BST)满足这样的性质,或是一颗空树:或左子树节点值小于根节点值.右子树节点值大于根节点值,左右子树也分别满足这个性质. 利用这个性质,可以迭代(iterative)或递归 ...
- 【数据结构05】红-黑树基础----二叉搜索树(Binary Search Tree)
目录 1.二分法引言 2.二叉搜索树定义 3.二叉搜索树的CRUD 4.二叉搜索树的两种极端情况 5.二叉搜索树总结 前言 在[算法04]树与二叉树中,已经介绍过了关于树的一些基本概念以及二叉树的前中 ...
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- 数据结构 《5》----二叉搜索树 ( Binary Search Tree )
二叉树的一个重要应用就是查找. 二叉搜索树 满足如下的性质: 左子树的关键字 < 节点的关键字 < 右子树的关键字 1. Find(x) 有了上述的性质后,我们就可以像二分查找那样查找给定 ...
- pat 甲级 1064 ( Complete Binary Search Tree ) (数据结构)
1064 Complete Binary Search Tree (30 分) A Binary Search Tree (BST) is recursively defined as a binar ...
- 《数据结构与算法分析——C语言描述》ADT实现(NO.03) : 二叉搜索树/二叉查找树(Binary Search Tree)
二叉搜索树(Binary Search Tree),又名二叉查找树.二叉排序树,是一种简单的二叉树.它的特点是每一个结点的左(右)子树各结点的元素一定小于(大于)该结点的元素.将该树用于查找时,由于二 ...
- [LeetCode] Recover Binary Search Tree 复原二叉搜索树
Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...
- 二叉查找树(binary search tree)详解
二叉查找树(Binary Search Tree),也称二叉排序树(binary sorted tree),是指一棵空树或者具有下列性质的二叉树: 若任意节点的左子树不空,则左子树上所有结点的值均小于 ...
随机推荐
- No parser was explicitly specified, so I'm using the best available HTML parser for this system ("html.parser").警告解决方法
在使用BeautifulSoup库时出现该警告,虽然不影响正常运行,但强迫症不能忍啊!! 详细警告信息如下: UserWarning: No parser was explicitly specifi ...
- MySQL用户权限控制一例
Preface I supposed we are encountering a situation that there's an anonymous user has connec ...
- 「日常训练」 Mike and Frog (CFR305D2C)
题意与分析 (Codeforces 548C) 我开始以为是一条数学题,死活不知道怎么做,无奈看题解,才知这是一条暴力,思维江化了- - 题意大概是这样的: 两个东西的初始高度分别为h1,h2&quo ...
- fiddler之弱网测试
今天就说一下如何使用fiddler做弱网测试 1.首先要把手机的代理打开,这就不多讲了哈,不懂得话请点传送门:https://www.cnblogs.com/fuxinxin/p/9146693.ht ...
- const在c/c++中的区别
#include <iostream> using namespace std; int main() { ; ; }; ; i < sizeof array / sizeof *a ...
- lintcode-100-删除排序数组中的重复数字
100-删除排序数组中的重复数字 素只出现一次,并且返回新的数组的长度. 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成. 样例 给出数组A =[1,1,2],你的函数应该返回长度2,此时 ...
- 代码托管平台(Git)
1,可以说GitHub的出现完全颠覆了以往大家对代码托管网站的认识.GitHub不但是一个代码托管网站,更是一个程序员的SNS社区.GitHub真正 迷人的是它的创新能力与Geek精神,这些都是无法模 ...
- Qt5.6关联VS2013,配置VAssistX
1. 安装Qt qt-creator-opensource-windows-x86-4.2.0.exe 2. 安装Qt VS插件 qt-vs-addin-1.2.5.exe 3. 配置ASSISTX ...
- maven打包遇到的问题
1.javax.servlet.jsp.tagext不存在 maven打包报程序包javax.servlet.jsp.tagext不存在或者maven打包报程序包javax.servlet.jsp不存 ...
- 创建一个doc对象时候 如果读取了一个已存在的xml对象时候 该xml对象的结构已存在doc中 当改变该doc结构时候 不需要创建新的doc对象
创建一个doc对象时候 如果读取了一个已存在的xml对象时候 该xml对象的结构已存在doc中 当改变该doc结构时候不 需要创建新的doc对象 直接添加即可 他会同步过去