数据结构基础---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),是指一棵空树或者具有下列性质的二叉树: 若任意节点的左子树不空,则左子树上所有结点的值均小于 ...
随机推荐
- 使用Vue-cli 3.x搭建Vue项目
一.Vue-cli 3.x安装 Node 版本要求:Vue CLI 需要 Node.js 8.9 或更高版本 (推荐 8.11.0+) npm install -g @vue/cli 查版本是否正确 ...
- C++学习013多态
何为多态 面向对象最要的特征之一就是多态,而纯虚函数是实现多态的主要方式.它可以提供一个通过用的接口,同样调用一个方法, 由于运算对象不同,方法也不同,这也就是所谓的动态绑定. #include &l ...
- 实用的placeholder插件,兼容IE下的placeholder,jquery插件
placeholder在IE下无法兼容 ,下面的插件很好的处理了这个问题,拿去不谢 /* * jQuery placeholder, fix for IE6,7,8,9 * @website itmy ...
- 【转】ASP.NET Core 快速入门(环境篇)
原文链接:http://www.cnblogs.com/zhaopei/p/netcore.html [申明]:本人.NET Core小白.Linux小白.MySql小白.nginx小白.而今天要说是 ...
- CSP201403-1:相反数
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的“计算机职业资格认证”考试,针对计算机软件开发. ...
- 《Deep Learning》第二章 线性代数 笔记
第二章 线性代数 2.1 名词 标量(scalar).向量(vector).矩阵(matrix).张量(tensor) 2.2 矩阵和向量相乘 1. 正常矩阵乘法: 2. 向量点积: 3. Hadam ...
- URAL 1932 The Secret of Identifier(容斥)
Description Davy Jones: You've been captain of the Black Pearl for 13 years. That was our agreement. ...
- eclipse版本命名规则与其他软件命名
文章:Eclipse各版本代号一览表 eclipse使用星球.神话人物.元素名称作为命名代号. 所以思路要放宽,不要拘泥于已有经验. java是用咖啡命名的: python中文意思是蟒蛇: 不拘泥于已 ...
- IDEA无法新建GUI Form文件
因为最近想开发一个IDEA的插件,所以在开发的过程中就需要创建Swing GUI Form文件.但是在项目中右键New中始终就是没有“GUI Form”这个选项,然后自己琢磨寻思着是不是没有启用Swi ...
- 使用锚点在HTML页面中快速移动
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...