二叉搜索树插入简单模板

mac2024-02-24  104

Description

Binary search tree: Used for searching. A binary tree where the left child contains only nodes with values less than the parent node, and where the right child only contains nodes with values greater than or equal to the parent.

#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<algorithm> #include<ctime> #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; const int N =1000000; struct Node { int key; struct Node *parents,*left,*right; }; struct Node *root,*NIL; void insert(int k) { struct Node *pre=NIL,*now=root;//前驱节点和当前节点 struct Node *e;//插入的节点 e=(Node *)malloc(sizeof(Node)); e->key=k; e->left=NIL; e->right=NIL; while(now!=NIL){ pre=now; if(e->key<now->key) now=now->left; else now=now->right; } e->parents=pre; if(pre==NIL)//如果前驱为空,说明是空子树 { root=e; } else{ if(e->key<pre->key){ pre->left=e; } else{ pre->right=e; } } return; } void preorder(Node *u){ if(u==NIL) return; printf("%d ",u->key); preorder(u->left); preorder(u->right); } void inorder(Node *u){ if(u==NIL) return; inorder(u->left); printf("%d ",u->key); inorder(u->right); } void print(Node *u) { inorder(u); printf("\n"); preorder(u); return; } int main() { string cmd;//insert是插入节点,print分别打印中序遍历和前序遍历 int x,n=0;//x为插入节点,n为n条命令 cin>>n; rep(i,1,n){ cin>>cmd; if(cmd=="insert") { cin>>x; insert(x); } else { print(root); } } return 0; }
最新回复(0)