排序二叉树

排序二叉树有如下性质:
1、若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
2、若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
3、左、右子树也分别为二叉排序树

struct BT//表示结点,定义一个结构名为BT,每个结点为BT类型,具有三个属性
{
	int val;//当前节点的值
	BT* left;//定义一个名为left的指针,指向BT类型的结点
	BT* right;//定义一个名为right的指针,指向BT类型的结点
	
};
struct Tree//定义一个树结构
{
	BT *root;//定义一个名为boot的指针,指向BT类型的结点,表示根结点
};

void insert(Tree* tree, int val)//形参为指向tree的指针
{
	BT* temp, *newnode;
	newnode = new BT;//为newnode开辟一个新的BT空间
	newnode->val = val;
	newnode->right = NULL;//初始化为一个空
	newnode->left = NULL;//
	if (tree->root==NULL)//如果现在的树为空的树,当前的点为根
	{
		tree->root = newnode;
	}
	else
	{
		temp = tree->root;//temp从根节点开始判断要插入的位置,将当前值与temp值比较,
		while (NULL != temp)//若大于temp,则判断temp的右儿子存不存在,存在就重新赋值temp,继续进行比较
		{
			if (temp->val<newnode->val)
			{
				if (temp->right==NULL)
				{
					temp->right = newnode;
					return;
				}
				else
				{
					temp = temp->right;
				}
			}
			else
			{
				if (temp->left == NULL)
				{
					temp->left = newnode;
					return;
				}
				else
				{
					temp = temp->left;
				}
			}
		}
	}
}
void preorder(BT* ptr)//根左右,即先访问根节点,再访问左结点,最后访问右结点
{
	if (ptr != NULL)
	{
		cout << ptr->val << " ";
		preorder(ptr->left);    //实际上是一个递归的过程
		preorder(ptr->right);
	}
}
int main()
{
	Tree tree;//定义一个类型为tree的树
	BT* b1 = new BT; //由于树的根结点为指向BT的指针,故需要定义一个指针类型的结点,开辟一个空间
	b1->val =10;   //初始化
	b1->left = new BT; //结点的left也是一个指针,开辟一个空间
	b1->left->val = 9;//初始化
	b1->left->left = NULL;//指针为空
	b1->left->right = NULL;
	b1->right = new BT;
	b1->right->val = 11;
	b1->right->left = NULL;
	b1->right->right = NULL;

	tree.root = b1;
	preorder(tree.root);
	cout << endl;

	Tree* to_tree = &tree;
	insert(to_tree, 20);

	preorder(tree.root);
	cout << endl;

	return 0;
}

运算结果:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值