[算法导论]二叉排序树

#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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值