二叉排序树插入结点

二叉排序树插入结点

 

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/archive/2012/08/29/2662900.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值