【机试书】二叉排序(搜索)树的定义和创建

“二叉排序树”的定义(也叫“二叉搜索树”):

二叉排序树是一颗特殊的二叉树,其上的数值>=其左子树上的任意结点数值,<=其右子树上任意结点的数值。

若对二叉排序树进行中序遍历,那么其遍历结果必然是一个递增序列,这也是二叉排序树名字的来由,通过建立二叉排序树就能对原无序序列进行排序,并实现动态维护。

因此,根据定义来进行编程实现二叉排序树。其实对于要插入的一个数,找到它应该在的位置==创建它应该在的结点。

二叉排序树的插入,模板代码

void insertTree(treeNode* &t, int a) //注意这里传引用&t,防止修改无效 
{
	if(t==NULL) //如果是空,创建该结点
	{
		t = new treeNode(a);
	} 
	else if(t->val>a) //a应该在左子树
	{
		insertTree(t->left,a);  
	} 
	else if(t->val<a)//a应该在右子树 
	{
		insertTree(t->right,a);
	}
}

AC代码:

#include<iostream>
#include<bits/stdc++.h> 
using namespace std;

struct treeNode
{
	int val;
	treeNode* left;
	treeNode* right;
	treeNode(int x):val(x),left(NULL),right(NULL){}	
};

void insertTree(treeNode* &t, int a, treeNode* father) //注意传参是传引用&t,否则主函数里root一直为空!!!
{
	if(t==NULL) //如果是空,创建该结点
	{
		t = new treeNode(a);
		if(father==NULL)
			//根节点,则无父节点
			cout<<-1<<endl;
		else 
		{
			//a找到(创建)了它应该在的结点位置,同时根据题意要输出father结点
			cout<<father->val<<endl; 
		} 
	} 
	else if(t->val>a) //则a应该在左子树
	{
		insertTree(t->left,a,t);  
	} 
	else if(t->val<a)//应该在右子树 
	{
		insertTree(t->right,a,t);
	}
}


int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		treeNode *root = NULL; 
		for(int i=0;i<n;i++)
		{
			int a;
			cin>>a;
			insertTree(root,a,NULL);
		}
	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值