算法之……二叉树的查找

来源:互联网 发布:北纬自动交易软件 编辑:程序博客网 时间:2024/06/06 18:21
由于自己的一时糊涂,将英语单词left和right弄反了,给你们的阅读带来很多不便,所以还是尽情谅解,由于是个人的代码,新手,所以有很多肯能你们认为不对的地方,还是请大家多提意见!!
C语言: Codee#11760
#include <stdio.h>
#include <malloc.h>
#define MAX_1 10
struct node
{
    int weight;
    int *parent;
    int *left;
    int *right;
};
typedef struct node Graph;
typedef Graph *Edge;
Edge Create_tree(Edge head,Edge New)//建立
{
    Edge pointer;
    Edge currentnode;
    pointer=head;
    if(pointer==NULL)
        return New;
    else
    {
        while(pointer!=NULL)
        {
            currentnode=pointer;
            if(New->weight>pointer->weight)
            {
                pointer=pointer->left;
            }
            else
                pointer=pointer->right;
        }
        if(New->weight>currentnode->weight)
        {
            currentnode->left=New;
            New->parent=currentnode;
        }
        else
        {
            currentnode->right=New;
            New->parent=currentnode;
        }

    }
    return head;
}
void print(Edge head)//print打印
{
    Edge currentnode;
    Edge pointer;
    pointer=head;
    if(pointer!=NULL)
    {
        printf("%d ",pointer->weight);
        print(pointer->left);
        print(pointer->right);
    }
}
void Insert_tree(Edge head)//insert a number插入
{
    Edge New;
    Edge pointer;
    Edge currentnode;
    pointer=head;
    New=(Edge)malloc(sizeof(Graph));
    New->left=NULL;
    New->right=NULL;
    New->parent=NULL;
    pointer=head;
    printf("please input the number you want to insert:");
    scanf("%d",&New->weight);
    while(pointer!=NULL)
    {
        currentnode=pointer;
        if(New->weight>pointer->weight)
        {
            pointer=pointer->left;
        }
        else
            pointer=pointer->right;
    }
    if(New->weight>currentnode->weight)
    {
        currentnode->left=New;
        New->parent=currentnode;
    }
    else
    {
        currentnode->right=New;
        New->parent=currentnode;
    }
}
void Min_tree(Edge head)//最小数的结点
{
    Edge pointer;
    Edge currentnode;
    pointer=head;
    currentnode=pointer;
    while(pointer!=NULL)
    {
        currentnode=pointer;
        pointer=pointer->right;
    }
    printf("%d",currentnode->weight);
}
void Successor_tree(Edge head,int key)//后继
{
    Edge pointer;
    Edge currentnode;
    Edge innode;
    pointer=head;
    while(pointer!=NULL)
    {
        if(pointer->weight==key)
        {
            currentnode=pointer;
            break;
        }
        else
            if(key>pointer->weight)
            {
                pointer=pointer->left;
            }
            else
                pointer=pointer->right;
    }
    if(currentnode->left!=NULL)
    {
        Min_tree(currentnode->left);
        printf("/n");
    }
    else
    {
        innode=currentnode->parent;
        while(innode!=NULL&&currentnode==innode->left)
        {
            currentnode=innode;
            innode=currentnode->parent;
        }
    }
    printf("%d",pointer->weight);

}
int main()
{
    Edge New;
    Edge head=NULL;
    int key;
    int n,i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        New=(Edge)malloc(sizeof(Graph));
        New->left=NULL;
        New->right=NULL;
        New->parent=NULL;
        scanf("%d",&New->weight);
        head=Create_tree(head,New);
    }
    print(head);//打印
    printf("/n");
    Insert_tree(head);//插入
    print(head);//打印
    printf("/n");
    Min_tree(head);
    printf("/n");
    printf("please input the number you want to Successor:");
    scanf("%d",&key);
    Successor_tree(head,key);
    printf("/n");
    return 0;
}
原创粉丝点击