一只排序二叉树查找算法
---C语言实现
---包含二叉树的创建 查找
#include <stdio.h>
#include <stdlib.h>
typedef struct sortbinarytreenode
{
int value;
struct sortbinarytreenode *pLeftChild;
struct sortbinarytreenode *pRightChild;
} SortBinaryTreeNode;
//排序二叉树创建
SortBinaryTreeNode* CreateSortBinaryTree(int arr[],int length)
{
int count;
int DirctionFlag = -1;//0:left 1:right
SortBinaryTreeNode *Head = NULL;
SortBinaryTreeNode *pLoopTemp = NULL;
SortBinaryTreeNode *pLastTemp = NULL;
SortBinaryTreeNode *pTemp = NULL;
if(arr ==NULL || length <= 0)return NULL;
for(count = 0;count<length;count++)
{
pTemp = (SortBinaryTreeNode*)malloc(sizeof(SortBinaryTreeNode));
pTemp->pLeftChild = NULL;
pTemp->pRightChild = NULL;
pTemp->value = arr[count];
if(!Head)
{
Head = pTemp;
}
else
{
pLoopTemp = Head;
while(pLoopTemp)
{
if(pLoopTemp->value > pTemp->value)
{
pLastTemp = pLoopTemp;
pLoopTemp = pLoopTemp->pLeftChild;
DirctionFlag = 0;
}
else if(pLoopTemp->value < pTemp->value)
{
pLastTemp = pLoopTemp;
pLoopTemp = pLoopTemp->pRightChild;
DirctionFlag = 1;
}
}
if(!DirctionFlag)
{
pLastTemp->pLeftChild = pTemp;
}
else
{
pLastTemp->pRightChild = pTemp;
}
}
}
return Head;
}
//排序二叉树查找
void SortBinaryTreeSearch(int arr[],int length,int SearchNum)
{
SortBinaryTreeNode *Head = NULL;
if(arr ==NULL || length <= 0)return ;
Head = CreateSortBinaryTree(arr,length);
while(Head)
{
if(Head->value > SearchNum)
{
Head = Head->pLeftChild;
}
else if(Head->value < SearchNum)
{
Head = Head->pRightChild;
}
else
{
printf("Search Succeed\n");
return ;
}
}
printf("Search Failed\n");
return ;
}
int main()
{
SortBinaryTreeNode *Head = NULL;
int arr[] = {2,6,9,12,23,55,67,99,123};
SortBinaryTreeSearch(arr,sizeof(arr)/sizeof(arr[0]),55);
system("pause");
return 0;
}