赞
踩
- typedef struct TreeNode
- {
- int data;//数据域
- struct TreeNode *lchild;//左孩子
- struct TreeNode *rchild;//右孩子
- }TreeNode;
- TreeNode *bstSearch(TreeNode *T,int data)
- {
- if(T)//不是空树则进入判断
- {
- if(T->data==data)//查找到,直接返回
- return T;
- else if(T->data>data)//左小右大,数据小,则递归往左子树走
- return bstSearch(T->lchild,data);
- else
- return bstSearch(T->rchild,data);//数据大,则递归往右子树走
- }
- else//全部查找结束没有则返回空
- return NULL;
- }
- void bstInsert(TreeNode **T,int data)
- {/*第一个参数**T:双重解引用,用于更改T中的值
- 第二个参数data:用于传递元素并比较大小*/
- if(*T==NULL)//首先判断该结点是否为空,是空结点则新建结点并初始化
- {
- *T = (TreeNode *)malloc(sizeof(TreeNode));//申请内存空间
- (*T)->data = data;//写入数据
- (*T)->lchild = NULL;//左孩子初始为空
- (*T)->rchild = NULL;//右孩子初始为空
- }
- else if(data==(*T)->data)//二叉排序树不允许重复元素,遇到重复元素跳过
- return;
- else if((*T)->data>data)//要插入的元素比结点内的元素小,则往左子树走
- return bstInsert(&((*T)->lchild),data);
- else//要插入的元素比结点内的元素大,则往右子树走
- return bstInsert(&((*T)->rchild),data);
- }
- void preOrder(TreeNode *T)
- {
- if(T)
- {
- printf("%d ",T->data);//输出根结点
- preOrder(T->lchild);//递归遍历左子树
- preOrder(T->rchild);//递归遍历右子树
- }
- }
- int main()
- {
- TreeNode *T = NULL;//定义根结点
- TreeNode *node;//定义第三结点主要接收BST查找函数变量
- int nums[6] = {8,6,10,9,11,23};
- int i;
- for(i=0;i<6;i++)
- {
- bstInsert(&T,nums[i]);//验证创建bst树
- }
- preOrder(T);//验证先序遍历
- printf("\n");
- node = bstSearch(T,9);//验证BST查找
- printf("%d\n",node->data);
- return 0;
- }
- #include <stdio.h>
- #include <stdlib.h>
- /*定义结构体*/
- typedef struct TreeNode
- {
- int data;//数据域
- struct TreeNode *lchild;//左孩子
- struct TreeNode *rchild;//右孩子
- }TreeNode;
- /*BST查找*/
- TreeNode *bstSearch(TreeNode *T,int data)
- {
- if(T)//不是空树则进入判断
- {
- if(T->data==data)//查找到,直接返回
- return T;
- else if(T->data>data)//左小右大,数据小,则递归往左子树走
- return bstSearch(T->lchild,data);
- else
- return bstSearch(T->rchild,data);//数据大,则递归往右子树走
- }
- else//全部查找结束没有则返回空
- return NULL;
- }
- /*创建bst树*/
- void bstInsert(TreeNode **T,int data)
- {/*第一个参数**T:双重解引用,用于更改T中的值
- 第二个参数data:用于传递元素并比较大小*/
- if(*T==NULL)//首先判断该结点是否为空,是空结点则新建结点并初始化
- {
- *T = (TreeNode *)malloc(sizeof(TreeNode));//申请内存空间
- (*T)->data = data;//写入数据
- (*T)->lchild = NULL;//左孩子初始为空
- (*T)->rchild = NULL;//右孩子初始为空
- }
- else if(data==(*T)->data)//二叉排序树不允许重复元素,遇到重复元素跳过
- return;
- else if((*T)->data>data)//要插入的元素比结点内的元素小,则往左子树走
- return bstInsert(&((*T)->lchild),data);
- else//要插入的元素比结点内的元素大,则往右子树走
- return bstInsert(&((*T)->rchild),data);
- }
- /*前序遍历(根左右)*/
- void preOrder(TreeNode *T)
- {
- if(T)
- {
- printf("%d ",T->data);//输出根结点
- preOrder(T->lchild);//递归遍历左子树
- preOrder(T->rchild);//递归遍历右子树
- }
- }
- /*主函数验证*/
- int main()
- {
- TreeNode *T = NULL;//定义根结点
- TreeNode *node;//定义第三结点主要接收BST查找函数变量
- int nums[6] = {8,6,10,9,11,23};
- int i;
- for(i=0;i<6;i++)
- {
- bstInsert(&T,nums[i]);//验证创建bst树
- }
- preOrder(T);//验证先序遍历
- printf("\n");
- node = bstSearch(T,9);//验证BST查找
- printf("%d\n",node->data);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。