zoukankan      html  css  js  c++  java
  • 二叉搜索树的操作集

    函数接口定义:

    函数Insert将X插入二叉搜索树BST并返回结果树的根结点指针;
    函数Delete将X从二叉搜索树BST中删除,并返回结果树的根结点指针;如果X不在树中,则打印一行Not Found并返回原树的根结点指针;
    函数Find在二叉搜索树BST中找到X,返回该结点的指针;如果找不到则返回空指针;
    函数FindMin返回二叉搜索树BST中最小元结点的指针;
    函数FindMax返回二叉搜索树BST中最大元结点的指针。

    裁判测试程序样例

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int ElementType;
    typedef struct TNode *Position;
    typedef Position BinTree;
    struct TNode{
        ElementType Data;
        BinTree Left;
        BinTree Right;
    };
    
    void PreorderTraversal( BinTree BT ); /* 先序遍历,由裁判实现,细节不表 */
    void InorderTraversal( BinTree BT );  /* 中序遍历,由裁判实现,细节不表 */
    
    BinTree Insert( BinTree BST, ElementType X );
    BinTree Delete( BinTree BST, ElementType X );
    Position Find( BinTree BST, ElementType X );
    Position FindMin( BinTree BST );
    Position FindMax( BinTree BST );
    
    int main()
    {
        BinTree BST, MinP, MaxP, Tmp;
        ElementType X;
        int N, i;
    
        BST = NULL;
        scanf("%d", &N);
        for ( i=0; i<N; i++ ) {
            scanf("%d", &X);
            BST = Insert(BST, X);
        }
        printf("Preorder:"); PreorderTraversal(BST); printf("
    ");
        MinP = FindMin(BST);
        MaxP = FindMax(BST);
        scanf("%d", &N);
        for( i=0; i<N; i++ ) {
            scanf("%d", &X);
            Tmp = Find(BST, X);
            if (Tmp == NULL) printf("%d is not found
    ", X);
            else {
                printf("%d is found
    ", Tmp->Data);
                if (Tmp==MinP) printf("%d is the smallest key
    ", Tmp->Data);
                if (Tmp==MaxP) printf("%d is the largest key
    ", Tmp->Data);
            }
        }
        scanf("%d", &N);
        for( i=0; i<N; i++ ) {
            scanf("%d", &X);
            BST = Delete(BST, X);
        }
        printf("Inorder:"); InorderTraversal(BST); printf("
    ");
    
        return 0;
    }
    /* 你的代码将被嵌在这里 */
    

    输入样例:

    10
    5 8 6 2 4 1 0 10 9 7
    5
    6 3 10 0 5
    5
    5 7 0 10 3

    输出样例:

    Preorder: 5 2 1 0 4 8 6 7 10 9
    6 is found
    3 is not found
    10 is found
    10 is the largest key
    0 is found
    0 is the smallest key
    5 is found
    Not Found
    Inorder: 1 2 4 6 8 9

    我的代码

    BinTree Insert(BinTree BST, ElementType X) {
    	if (!BST) {
    		BST = (struct TNode *)malloc(sizeof(struct TNode));
    		BST->Data = X;
    		BST->Left = BST->Right = NULL;
    	}
    	else {
    		if (X > BST->Data)  BST->Right = Insert(BST->Right, X);
    		else if (X < BST->Data)  BST->Left = Insert(BST->Left, X);
    	}	
    	return BST;
    }
    Position Find(BinTree BST, ElementType X) {
    	BinTree tmp = BST;
    	while (tmp) {
    		if (X > tmp->Data) tmp = tmp->Right;
    		else if (X < tmp->Data) tmp = tmp->Left;
    		else  return tmp;
    	}
    	return NULL;
    }
    Position FindMin(BinTree BST) {
    	BinTree tmp = BST;
    	if (!tmp) return NULL;
    	while (tmp->Left) {
    		tmp = tmp->Left;
    	}
    	return tmp;
    }
    Position FindMax(BinTree BST) {
    	BinTree tmp = BST;
    	if (!tmp) return NULL;
    	while (tmp->Right) {
    		tmp = tmp->Right;
    	}
    	return tmp;
    }
    BinTree Delete(BinTree BST, ElementType X) {
    	Position tmp;
    	if (!BST) {
    		printf("Not Found
    ");
    	}else {
    		if (X > BST->Data) BST->Right = Delete(BST->Right, X);
    		else if (X < BST->Data) BST->Left = Delete(BST->Left, X);
    		else {
    			if (BST->Left&&BST->Right) {
    				tmp = FindMin(BST->Right);
    				BST->Data = tmp->Data;
    				BST->Right = Delete(BST->Right, tmp->Data);
    			}
    			else {
    				tmp = BST;
    				if (!BST->Left) {
    					BST = BST->Right;
    				}
    				else if (!BST->Right) {
    					BST = BST->Left;
    				}
    				free(tmp);
    			}
    		}
    	}
    	return BST;
    }
    
  • 相关阅读:
    Oracle 查询表空间容量脚本
    C#保留小数位的方法集合
    asp.net c# 去掉字符串中重复项并将结果遍历出来算法
    汇总sql server数据库所有表名、列数、行数
    Web表单设计之注册表单
    精简高效的CSS命名准则和方法
    MSSQL查看和解除表锁
    XML通用操作类
    Ajax学习笔记一(xmlHttpRequest对象)
    SQL Server无法生成FRunCM线程|FRunCM 线程|FRunCM
  • 原文地址:https://www.cnblogs.com/TangYJHappen/p/13255006.html
Copyright © 2011-2022 走看看