Algorithm/기타(기업등)

[SAP/C++] BST from postorder

IagreeBUT 2021. 4. 24. 17:06
728x90

난이도 : 중

 

후순위 운행으로 이진탐색 트리 만들기 

 

BST : Binary Search Tree (이진 탐색 트리)

이진 탐색 트리 : 탐색하고자 하는 key값을 배열의 중앙값과 비교하여, 

크면 오른쪽 list에 존재하고, 작으면 왼쪽 list에 존재한다. 

 

PostOrder : 후순위 운행 L->R->V 순으로 탐색을 진행

 

후순위 운행으로 주어진 그래프를 탐색하여, 이를 BST로 만들기

이때 그래프는 배열로 주어져있음

 

 

// postorder : 후순위 운행 L-R-V
Node* BST(Node* root,int key)
{
    if(root==NULL)
        root=new Node(key);
    else if(root->data > key)
        root->left=BST(root->left,key); //root->left를 root로 재귀적으로 진행 
    else
        root->right=BST(root->right,key);//root->right를 root로 재귀적으로 진행 
        
    return root;
}

Node *constructTree (int post[], int size)
{
    if(size==0)
        return NULL;
        
    Node* root=NULL;
    
    //postorder이므로 L->R->V라 거꾸로진행했을 때 가장 마지막이 root
    for(int i=size-1;i>=0;i--)
        root=BST(root,post[i]);
        
    return root;
}
728x90