二叉排序树插入结点

二叉排序树插入结点

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);//中序遍历右子树
	}
}
原文地址:https://www.cnblogs.com/tgkx1054/p/2662900.html