#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
[算法导论]二叉排序树
最新推荐文章于 2023-04-18 08:00:00 发布