[算法导论]二叉排序树

本文详细探讨了二叉排序树的基本概念、性质及其在排序和查找操作中的应用。通过实例解析了二叉排序树如何确保左子节点小于父节点,右子节点大于父节点,从而实现快速的数据组织和检索。此外,还介绍了二叉排序树的插入、删除算法以及平衡问题,揭示了其在效率上的优势和潜在挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#include<iostream>
#include<stdlib.h>


using namespace std;
#define Length 10


typedef struct Tree
{
	Tree * p;
	Tree * left;
	Tree * right;
	int key;
}*TreeList, TreeNode;


void InorderTreeWalk(TreeList Root);//二叉查找树的中序遍历 输出应该是一个有序序列 
void InitTree1(TreeList &Root, int key);//建立二叉排序树 递归 
void InitTree2(TreeList &Root, int key);//建立二叉排序树 迭代 (也可以作为插入节点的操作函数) 
void InsertTree(TreeList &Root, int key); 
void SearchKey1(TreeList Root, int key);//递归法 关键字的查找 
void SearchKey2(TreeList Root, int key);//迭代法 关键字的查找 
TreeList SearchMin(TreeList Root);//返回二叉排序树中最小结点 
TreeList SearchMax(TreeList Root);//返回最大的节点 
TreeList SearchPredecessor(TreeList Node);//找给定结点的前驱结点 
TreeList SearchSuccessor(TreeList Node); //找给定结点的后继结点 
void TransPlant(TreeList Root, TreeList u, TreeList v);
void TreeDelete(TreeList Root, TreeList Node); 
void LeftRotate(TreeList &Root, TreeList Node); 


int main ()
{
	int num[Length] = {12, 2, 34, 56, 26, 8, 31, 6, 20, 3};
	TreeList Root = NULL;
	
	for(int i = 0; i < Length; i++)
		InitTree1(Root, num[i]);//两种建树的方法 
		//InitTree2(Root, num[i]);
	InorderTreeWalk(Root);
	
	cout << endl << endl;
	
	int key = 34;
	SearchKey1(Root, key);
	SearchKey2(Root, key);


	
	TreeList min = SearchMin(Root);
	printf("\n树中最小的关键字是: %d\n", min->key);
	
	TreeList max = SearchMax(Root);
	printf("\n树中最大的关键字是: %d\n", max->key);
	
	TreeList Nodepre = SearchPredecessor(Root);
	printf("\n当前节点是%d, 其直接前驱是%d", Root->key, Nodepre->key);
	
	TreeList 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值