면접 문제 37: 서열화 두 갈래 나무

2067 단어

제목 설명

  • 두 함수를 실현하여 각각 서열화와 반서열화 두 갈래 나무에 사용하십시오

  • 제목 해독

  • 검지 Offer 194
  • 참고서에 쓰여진 것은 사상에 귀착되어 쓴 것으로 우객망에서 왜 통하지 않았는지 모르겠지만 현지에서 통하여 좋다. 시간 원인은 우객망에서 조정하지 않았다

  • 코드

    #include
    using namespace std;
    
    typedef struct node{
        char val;            // 
        struct node *left;   // 
        struct node *right;  // 
    }TreeNode;
    
    //  
    TreeNode* DeserializeCore(char str[], int *length){
        if(str[(*length)] == '$'){
            (*length)++;
            return NULL;
        }
        else{
            TreeNode* temp = new TreeNode();
            temp->val = str[(*length)];
            temp->left = temp->right = NULL;
            (*length)++;
            temp->left  = DeserializeCore(str, length);
            temp->right = DeserializeCore(str, length); 
            return temp;
        }
    }
    
    // 
    TreeNode* create(){
        char tt[20] = {'1', '2', '4', '$', '$', '$', '3', '5', '$', '$', '6', '$', '$'};
        int length = 0;
        TreeNode* root;
    
        root = DeserializeCore(tt, &length);
        return root;
    }
    
    void SerializeCore(TreeNode *root, char result[], int *length){
        if(root == NULL){
            result[(*length)] = '$';
            (*length)++;
        }
        else{
            result[(*length)] = root->val;;
            (*length)++;
            SerializeCore(root->left, result, length);
            SerializeCore(root->right, result, length);
        }
    }
    
    //  
    char* Serialize(TreeNode *root) {    
            int length = 0;
            static char result[100];
           
            SerializeCore(root, result, &length);
            result[length] = '\0';
            return result;
    }
    
    //  
    void qianxu(TreeNode* root){
        if(root){
            cout<val<left);
            qianxu(root->right);
        }
    }
    
    int main(){
        TreeNode* root;
        root = create();
        qianxu(root);
        cout<

    총결산 전망

  • 좋은 웹페이지 즐겨찾기