数据结构快速回顾——二叉查找树

二叉查找树Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:

  1. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  2. 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  3. 任意节点的左、右子树也分别为二叉查找树。
  4. 没有键值相等的节点(no duplicate nodes)。

二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低,为O(log n),意味着树的所有节点平均深度为nlogn。。二叉查找树是基础性数据结构,用于构建更为抽象的数据结构,如集合、multiset、关联数组等。

二叉查找树应用广泛

1、二叉查找树用于排序

步骤:

1)构建二叉查找树BST;

2)中序遍历BST;


通过分析(算法导论里面有具体分析)可知,快速排序原理和二叉搜索树的构建是一致的,只不过比较的顺序不同。

BST具体实现如下:


<span style="font-size:18px;">#include<stdio.h>

typedef	struct node
{
	int value;
	struct node* pleft;
	struct node* pright;
	
}BNode;

void Visit(BNode *pRoot)
{
	printf("%d\t",pRoot->value);
}
void InOrderTraverse(BNode *pRoot)
{
	if(pRoot == NULL)
		return;
	InOrderTraverse(pRoot->pleft);
	Visit(pRoot);
	InOrderTraverse(pRoot->pright);
}
//由于可能改变指针位置,所以使用指针的引用作为形参 
BNode* InsertBST(BNode *&root, int value)
{
	if(root == NULL)
	{
		BNode* n = new BNode();
		n->value = value;
		n->pleft = NULL;
		n->pright = NULL;
		root = n;
		return root;
	}	
	if(root->value < value)
	{
		root->pright = InsertBST(root->pright, value);
	}
	else 
	{
		root->pleft = InsertBST(root->pleft, value);
	}
	return root;
}

//由于可能改变指针位置,所以使用指针的引用作为形参 
void InsertBST2(BNode *&root, int val)
{

	BNode* n = new BNode();
	n->value = val;
	n->pleft = NULL;
	n->pright = NULL;
	
	if(!root)
	{
		root = n;
		return;
	}
	
	BNode* tmp = root;
	while(tmp)
	{
		if(tmp->value < n->value)
		{
			if(tmp->pright)
			{
				tmp = tmp->pright;	
				continue;			
			}
			else
			{
				tmp->pright = n;
				return;
			}
		}
		else
		{
			if(tmp->pleft)
			{
				tmp = tmp->pleft;	
				continue;			
			}
			else
			{
				tmp->pleft = n;
				return;
			}
				
		}
	}
}

int main()
{

	BNode* pnode = NULL;
	
	int data[8]= {3,2,6,3,8,6,1,4};
	for(int i=0;i <8;i++)
	{
		//InsertBST2(pnode,data[i]);
		InsertBST(pnode,data[i]);
	}
	
	InOrderTraverse(pnode);
	return 0;
}
</span>


    原文作者:二叉查找树
    原文地址: https://blog.csdn.net/bigbigtreewhu/article/details/33799567
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞