二叉排序树插入结点
BSTree *InsertBST(BSTree *bst,int key) //插入节点
{
BSTree *p,*s,*pre;
s=(BSTree*)malloc(sizeof(BSTreeNode));
s->data=key;
s->lchild=s->rchild=NULL;
if(bst==NULL)
{
bst=s;
return bst;
}
p=bst;
while(p)
{
pre=p;//指向其父节点
if(p->data==key)return p;
else if(p->data>key)p=p->lchild;
else p=p->rchild;
}
if(pre->data<key)
pre->rchild=s;
else
pre->lchild=s;
return s;
}
判断一棵二叉树是不是二叉排序树
#include "stdafx.h"
#include<iostream>
using namespace std;
typedef struct BSTreeNode
{
int data;
struct BSTreeNode *lchild,*rchild;
}BSTree;
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
BSTree *pre=NULL;//中序遍历二叉排序树,所得序列为增序,在遍历中将当前结点和前驱结点比较。全局变量pre保存其前驱结点
bool flag=true;//全局变量,初值为true,若不是二叉排序树,置flag为false
void JudgeBST(BSTree *t,bool flag)
{
if(t!=NULL && flag)
{
JudgeBST(t->lchild,flag);//中序遍历左子树
if(pre==NULL)pre=t;//中序遍历的第一个结点不必判断
else if(pre->data<t->data)pre=t;//前驱指针指向当前结点
else {flag=false;}//不是二叉排序树
JudgeBST(t->rchild,flag);//中序遍历右子树
}
}