二叉搜索树
二叉搜索树是二叉树中最常用的一种树,也是比较简单的一种树。
二叉搜索树遵寻的原则是 左<根<右
即每个节点的左孩子<根节点<右孩子
1.建立和插入
二叉树的建立
typedef struct node
{
int data;
struct node *left;
struct node *right;
}Node;
//建立模板
typedef struct tree
{
Node *root;
}Tree;
二叉树的插入
void insert(Tree *tree, int value)
{
Node *node;
node=new Node; //将数据建立成节点
node->data=value;
node->left = NULL; //节点的左孩子和右孩子设为空节点
node -> right = NULL;
if(tree->root == NULL){
tree->root=node; //如果树的根节点为空,直接将节点变为根节点
}
else{
Node *temp = tree -> root; //建立遍历指针
while (temp != NULL) //指针遍历找出插入位置
{
if(value < temp->data) //**小于根节点的值**
{
if(temp->left == NULL) //左孩子为空,放入
{
temp->left=node;
return ;
}
else temp=temp->left; //左孩子不为空,则向左找
}
else{ //**大于根节点的值**
if(temp -> right== NULL) //右节点
{
temp->right = node;
return ;
}
else
temp = temp->right;
}
}
}
}
2.遍历
1.先序(先遍历根,再遍历左节点,然后是右节点)
void preorder(Node *node)
{
if(node != NULL)
{
cout<<node->data;
preorder(node->left);
preorder(node->right);
}
}
2.中序(先遍历左,再遍历根,然后是右)
void inorder(Node *node)
{
if(node != NULL)
{
inorder(node->left);
cout<<node->data;
inorder(node->right);
}
}
3.后序(先遍历左,然后是右,最后是根)
void downorder(Node *node)
{
if(node != NULL)
{
downorder(node->left);
downorder(node->right);
cout<<node->data;
}
}
以上就是二叉搜索树的建立和简单的遍历,其中中序遍历是从小到大顺序排列。
以下是全部c++编写的程序:
#include <iostream>
using namespace std;
typedef struct node
{
int data;
struct node *left;
struct node *right;
}Node;
typedef struct tree
{
Node *root;
}Tree;
void insert(Tree *tree, int value)
{
Node *node;
node=new Node;
node->data=value;
node->left = NULL;
node -> right = NULL;
if(tree->root == NULL){
tree->root=node;
}
else{
Node *temp = tree -> root;
while (temp != NULL)
{
if(value < temp->data)
{
if(temp->left == NULL)
{
temp->left=node;
return ;
}
else temp=temp->left;
}
else{
if(temp -> right== NULL)
{
temp->right = node;
return ;
}
else
temp = temp->right;
}
}
}
}
void preorder(Node *node)
{
if(node != NULL)
{
cout<<node->data;
preorder(node->left);
preorder(node->right);
}
}
void inorder(Node *node)
{
if(node != NULL)
{
inorder(node->left);
cout<<node->data;
inorder(node->right);
}
}
void downorder(Node *node)
{
if(node != NULL)
{
downorder(node->left);
downorder(node->right);
cout<<node->data;
}
}
int main(){
int a[]={6,3,4,1,2,5};
Tree tree;
tree.root=NULL;
for(int i=0; i<6; i++)
insert(&tree,a[i]);
preorder(tree.root);
cout<<endl;
inorder(tree.root);
cout<<endl;
downorder(tree.root);
cout<<endl;
return 0;
}
写法学自b站灯笼哥(正月点灯笼)。