zoukankan      html  css  js  c++  java
  • 二叉查找树的Find,FindMin,FindMax的递归和非递归实现

    typedef struct TreeNode *Position;
    typedef struct TreeNode *SearchTree;
    
    struct TreeNode{
        ElementType X;
        SearchTree Left;
        SearchTree Right;
    };
    
    //建立一颗空树的例程
    SearchTree
    MakeEmpty( SearchTree T )
    {
        if( T != NULL )
        {//先做空儿子,在弄父亲
            MakeEmpty(T->Left);
            MakeEmpty(T->Right);
            free(T);
        }
        return NULL;//避免返回值的警告
    }
    //二叉查找树的Find操作(尾递归)
    SearchTree
    Find( SearchTree T, ElementType X )
    {
        if( T == NULL )
            return NULL;
        if( T->Element > X )
            return Find( T->Left, X );
        else if( T->Element < X )
            return Find( T->Right, X );
        else
            return T;
    }
    //对二叉查找树FindMin操作(非递归实现,自创)
    SearchTree
    FindMin( SearchTree T )
    {
        SearchTree Tmp;
        
        if(T == NULL )
            return NULL;//空树
    
        Tmp = T->Left;
        while( Tmp != NULL )
        {
            T = Tmp;
            Tmp = Tmp->Left;
        }
        return T->Element;
    }
    //FindMin操作非递归实现正解
    SearchTree
    FindMin( SearchTree T )
    {
        if(T != NULL )
        {
            while( T->Left != NULL )
                T = T->Left;
        }
        return T;
    }
    //FindMin递归正解
    SearchTree
    FindMin( SearchTree T )
    {
        if( T == NULL )
            return NULL;
        if( T->Left != NULL ){
            T = T->Left;
            return FindMin( T );
        }
        else
            return T;
    }
    //FindMax非递归
    SearchTree
    FindMax( SearchTree T )
    {
        if( T == NULL )
            return NULL;
        while( T->Right != NULL )
        {
            T = T->Right;
        }
        return T;
    }
    //FindMax递归
    SearchTree
    FindMax( SearchTree T )
    {
        if( T == NULL )
            return NULL;
        if( T->Right != NULL ){
            T = T->Right;
            return FindMax( T );
        }
        return T;
    }
    //FindMax递归超正解
    SearchTree
    FindMax( SearchTree T )
    {
        if( T == NULL )
            return NULL;
        else
        if( T->Right == NULL )
            return T;
        else
            return FindMax( T->Right );
    }
    View Code

    二叉树的节点儿子不多于两个,针对每个节点,且左子树所有数比节点小,右子树所有数比节点大

  • 相关阅读:
    邻项交换排序
    [POJ 2559]Largest Rectangle in a Histogram 单调栈
    最大子序和 单调队列
    单调栈 总结
    计算中缀表达式
    [HYSBZ 2457] 双端队列
    数组的宽度 单调栈
    SVM从入门到精通
    CVPR2018_RotationNet: Joint Object Categorization and Pose Estimation Using Multiviews from Unsupervised Viewpoints
    比特币以及区块链入门
  • 原文地址:https://www.cnblogs.com/gabygoole/p/4750891.html
Copyright © 2011-2022 走看看