Inplementation of Binary Search Tree using recursion-local version 1【1月22日学习笔记】
1.遍历链表,将节点接到末端 【1月16日学习笔记】2.Inserting a node at beginning,全局变量头指针【1月16日学习笔记】3.Inserting a node at beginning,局部变量头指针版本1【1月16日学习笔记】4.Inserting a node at beginning,局部变量头指针版本2【1月16日学习笔记】5.Inserting a node at nth position【1月17日学习笔记】6.Delete d node at nth position【1月17日学习笔记】7.Reverse a linked list【1月17日学习笔记·】8.Print linked list using recursion【1月17日学习笔记】9.Reverse a linked list using recursion【1月17日学习笔记】10.Doubly linked list【1月17日学习笔记】11.Stack-array based implementation【1月17日学习笔记】12.Stack-link list implementation【1月18日学习笔记】13.string reversal using stack【1月19日学习笔记】14.Linked list reversal using stack【1月19日学习笔记】15.Check for balanced parentheses using stack【1月20日学习笔记】16.Evaluation Of postfix Expression using stack【1月21日学习笔记】17.Infix to postfix conversion using stack【1月21日学习笔记】18.Queue-Linked List Implementation【1月22日学习笔记】
19.Inplementation of Binary Search Tree using recursion-local version 1【1月22日学习笔记】
20.Inplementation of Binary Search Tree using iteration-local version 2【1月23日学习笔记】21.Inplementation of Binary Search Tree using recursion-local version 3【1月23日学习笔记】22.Find min and max element in bst using iteration【1月23日学习笔记】23.Find min and max element in bst using recursion【1月23日学习笔记】24.Find height of a binary tree【1月23日学习笔记】25.Binary tree traversal-- level-order traversal using queue(no recursion)【1月23日学习笔记】26.Binary tree traversal-- beadth-first and depth-first【1月23日学习笔记】27.Check if a given binary tree is BST【2月14日学习笔记】28.Delete a node from bst【2月15日学习笔记】点击查看代码
//Inplementation of Binary Search Tree
#include<iostream>
using namespace std;
struct bstnode {
int data;
bstnode* left;
bstnode* right;
};
/*bstnode* root = NULL;*/
/*root = NULL; wrong*/
/*全局范围内的变量的初始化必须在声明的时候完成*/
bstnode* getnewnode(int x) {
bstnode* temp = new bstnode;
temp->data = x;
temp->left = NULL;
temp->right = NULL;
return temp;
}//创建新节点并返回地址
bstnode* insert(bstnode* root,int x) {//参数式递归
if (root == NULL) {//空树
root = getnewnode(x);//root指向新节点
return root;//递归中止
}
if (x <= root->data) {//插入数据较小以左边为子root建立新子树
root->left = insert(root->left, x);//左边子root指向新子树
}
else {//插入数据较大以右边为子root建立新子树
root->right = insert(root->right, x); //右边子root指向新子树
}
return root;//返回新树的头节点的地址
}//时间复杂度:O(logn)in best case(balanced bst)
bool search(bstnode* root, int x) {//副本即可
if (root == NULL) return false;
if (root->data == x) return true;
if (x <= root->data) return search(root->left, x);
else return search(root->right, x);
}//时间复杂度:O(logn)in best case(balanced bst)
int main() {
bstnode* root = NULL;
root = insert(root, 15);
root = insert(root, 10);
root = insert(root, 20);
root = insert(root, 25);
root = insert(root, 8);
root = insert(root, 12);
int n;
cin >> n;
if (search(root, n)) cout << "Found" << endl;
else cout << "Not Found\n";
}
合集:
数据结构学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通