编辑代码

#include <stdio.h>
#include <malloc.h>

typedef struct TreeNode *BinTree;
struct TreeNode{
    int Data;
    BinTree Left;
    BinTree Right;
};

BinTree createBinTree();
BinTree FindMin(BinTree BST);
BinTree FindMax(BinTree BST);
BinTree IterFindMin(BinTree BST);

//递归查找最小元素
BinTree FindMin(BinTree BST){
    //空的二叉搜索树,返回NULL
    if(!BST){
        return NULL;
    }
    //找到最左叶结点并返回
    else if(!BST->Left){
       return BST;
    }
    //沿左分支继续查找
    else{
        return FindMin(BST->Left);
    }
}

//非递归查找最小元素
BinTree IterFindMin(BinTree BST){
    while(BST){
        if(BST->Left){
            BST = BST->Left;
        }else{
            return BST;
        }
    }
    return NULL;
}


//递归查找最大元素
BinTree FindMax(BinTree BST){
    //空的二叉搜索树,返回NULL
    if(!BST){
        return NULL;
    }
    //找到最右叶结点并返回
    else if(!BST->Right){
       return BST;
    }
    //沿右分支继续查找
    else{
        return FindMax(BST->Right);
    }
}

//先序创建二叉树
BinTree createBinTree(){
    BinTree treeNode;
    int data;
    scanf("%d",&data);
    if(data){
        treeNode = (BinTree)malloc(sizeof(BinTree));
        treeNode->Data = data;
        treeNode->Left = createBinTree();
        treeNode->Right = createBinTree();
    }else{
        treeNode = NULL;
    }
    return treeNode;
}

int main () {
    BinTree T,TMin,TMax,iterTMin;
    T = createBinTree();
    TMax = FindMax(T);
    printf("最大元素为:%d\n",TMax->Data);
    TMin = FindMin(T);
    printf("递归查找的最小元素为:%d\n",TMin->Data);
    iterTMin = IterFindMin(T);
    printf("非递归查找的最小元素为:%d\n",iterTMin->Data);
}