두 갈래 나무의 창설과 세 가지 반복

4435 단어
하나.두 갈래 나무를 만들 수 있습니다.먼저 트리의 노드를 만듭니다.
ypedef struct node{            // 
    int data;
    struct node* left;
    struct node* right;
}Node; 
 

`typedef struct{         // 
    Node* root;
}Tree;
`` 
 , 
 , , , , , , , :


여기에 코드를 삽입합니다.
void insert(Tree* tree,int value)       // 
{
    Node* node=(Node*)malloc(sizeof(Node));     // 
    node->data=value;
    node->left=NULL;
    node->right=NULL;
    if(tree->root==NULL)        // 
    {
        tree->root=node;
    }
    else
    {
        // 
        Node* temp=tree->root;  // 
        while(temp!=NULL)
        {
            if(valuedata)    // 
            {
                if(temp->left==NULL)
                {
                    temp->left=node;
                    return;
                }
                else
                {
                    // 
                    temp=temp->left;
                }
            }
            else
            {
                // 
                if(temp->right==NULL)
                {
                    temp->right=node;
                    return;
                }
                else
                {
                    // 
                    temp=temp->right;
                }
            }
        }
    }
    return;
}

다음은 세 가지 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례차례 차례
void preorder(Node *node)            // 
{
    if(node!=NULL)
    {
        printf("%d ",node->data);
        preorder(node->left);
        preorder(node->right);
    }
}
 

중서 역력: 먼저 중서 역력, 다시 방문 루트 결점, 마지막 중서 역력, 오른쪽 트리
void inorder(Node* node)        // 
{
    if(node!=NULL)
    {
        inorder(node->left);
        printf("%d ",node->data);
        inorder(node->right);
    }
}
 

후순 반복: 선후 차례대로 왼쪽 트리를 훑어보고, 후순 차례대로 오른쪽 트리를 훑어보고, 마지막으로 뿌리 결점을 방문한다.
void epilogue(Node *node)        // 
{
    if(node!=NULL)
    {
        epilogue(node->left);
        epilogue(node->right);
        printf("%d ",node->data);
    }
}
 

여기까지 임무는 기본적으로 완성되었고, 다음은 전체 코드이다
#include
#include
typedef struct node{            // 
    int data;
    struct node* left;
    struct node* right;
}Node;
typedef struct{         // 
    Node* root;
}Tree;
void insert(Tree* tree,int value)       // 
{
    Node* node=(Node*)malloc(sizeof(Node));     // 
    node->data=value;
    node->left=NULL;
    node->right=NULL;
    if(tree->root==NULL)        // 
    {
        tree->root=node;
    }
    else
    {
        // 
        Node* temp=tree->root;  // 
        while(temp!=NULL)
        {
            if(valuedata)    // 
            {
                if(temp->left==NULL)
                {
                    temp->left=node;
                    return;
                }
                else
                {
                    // 
                    temp=temp->left;
                }
            }
            else
            {
                // 
                if(temp->right==NULL)
                {
                    temp->right=node;
                    return;
                }
                else
                {
                    // 
                    temp=temp->right;
                }
            }
        }
    }
    return;
}
void preorder(Node *node)            // 
{
    if(node!=NULL)
    {
        printf("%d ",node->data);
        preorder(node->left);
        preorder(node->right);
    }
}
void inorder(Node* node)        // 
{
    if(node!=NULL)
    {
        inorder(node->left);
        printf("%d ",node->data);
        inorder(node->right);
    }
}
void epilogue(Node *node)        // 
{
    if(node!=NULL)
    {
        epilogue(node->left);
        epilogue(node->right);
        printf("%d ",node->data);
    }
}
int main()
{
    Tree tree;
    tree.root=NULL;         // 
    int n;
    scanf("%d",&n);
    for(int i=0;i

좋은 웹페이지 즐겨찾기