/// 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的更多相关文章

  1. 数据结构之Binary Search Tree (Java)

    二叉查找树简介 二叉查找树(Binary Search Tree), 也成二叉搜索树.有序二叉树(ordered binary tree).排序二叉树(sorted binary tree), 是指一 ...

  2. 算法与数据结构基础 - 二叉查找树(Binary Search Tree)

    二叉查找树基础 二叉查找树(BST)满足这样的性质,或是一颗空树:或左子树节点值小于根节点值.右子树节点值大于根节点值,左右子树也分别满足这个性质. 利用这个性质,可以迭代(iterative)或递归 ...

  3. 【数据结构05】红-黑树基础----二叉搜索树(Binary Search Tree)

    目录 1.二分法引言 2.二叉搜索树定义 3.二叉搜索树的CRUD 4.二叉搜索树的两种极端情况 5.二叉搜索树总结 前言 在[算法04]树与二叉树中,已经介绍过了关于树的一些基本概念以及二叉树的前中 ...

  4. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

  5. 数据结构 《5》----二叉搜索树 ( Binary Search Tree )

    二叉树的一个重要应用就是查找. 二叉搜索树 满足如下的性质: 左子树的关键字 < 节点的关键字 < 右子树的关键字 1. Find(x) 有了上述的性质后,我们就可以像二分查找那样查找给定 ...

  6. pat 甲级 1064 ( Complete Binary Search Tree ) (数据结构)

    1064 Complete Binary Search Tree (30 分) A Binary Search Tree (BST) is recursively defined as a binar ...

  7. 《数据结构与算法分析——C语言描述》ADT实现(NO.03) : 二叉搜索树/二叉查找树(Binary Search Tree)

    二叉搜索树(Binary Search Tree),又名二叉查找树.二叉排序树,是一种简单的二叉树.它的特点是每一个结点的左(右)子树各结点的元素一定小于(大于)该结点的元素.将该树用于查找时,由于二 ...

  8. [LeetCode] Recover Binary Search Tree 复原二叉搜索树

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  9. 二叉查找树(binary search tree)详解

    二叉查找树(Binary Search Tree),也称二叉排序树(binary sorted tree),是指一棵空树或者具有下列性质的二叉树: 若任意节点的左子树不空,则左子树上所有结点的值均小于 ...

随机推荐

  1. Uber CEO博鳌论坛采访:看好中国市场共享经济的发展模式

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  2. Hadoop启动后无法启动NodeManager

    在配置完Hadoop集群后,使用命令:“start-all.sh”进行启动集群.然后使用命令:“jps”查看进程启动情况,发现没有NodeManager 只需要使用命令:cd  /usr/local/ ...

  3. 保证IO流不出错

    package com.io.demo1; import java.io.FileInputStream;import java.io.IOException; /** * 测试IO * io流,输入 ...

  4. 语法测试cnblogs使用Markdown

    参考自作业部落Cmd Markdown 编辑器 https://www.zybuluo.com 欢迎使用 Cmd Markdown 编辑阅读器 什么是 Markdown Markdown 是一种方便记 ...

  5. vue.js的特点-1

    1. Vue.js是数据驱动的,无需手动操作DOM. 它通过一些特殊的HTML语法,将DOM和数据绑定起来.一旦你创建了绑定,DOM将和数据保持同步,每当变更了数据,DOM也会相应的更新. 2. MV ...

  6. el-input怎么绑定回车事件

    在 Vue 2.0 中,为自定义组件绑定原生事件必须使用 .native 修饰符:<el-input v-model="queryForm.skuName" placehol ...

  7. Flink之状态之checkpointing

    1.前言 在Flink中,函数和操作符都可以是有状态的.在处理每个消息或者元素时,有状态的函数都会储存信息,使得状态成为精密操作中关键的组成部分. 为了使状态能够容错,Flink会checkpoint ...

  8. maven中如何得到父工程的位置

    目前的项目是一个父子工程项目,想要在子工程的pom文件中操作父工程目录下的资源. maven官方提供了标准的写法,比如parent.basedir之类的,网上可以找到很多,但尝试了之后就是不识别. 搞 ...

  9. NIO Q&A(持续补充。。。。)

    Q:NIO是非阻塞的.但调用的selector.select()方法会阻塞.这和NIO非阻塞岂不是矛盾了? A:非阻塞指的是 IO 事件本身不阻塞,但是获取 IO 事件的 select 方法是需要阻塞 ...

  10. HTML5<canvas>标签:使用canvas元素在网页上绘制线条和圆(1)

    什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...