2017春招去哪儿笔试

本文介绍了一个简单的二叉树层序遍历算法实现,并提供了一段使用C++编写的代码示例。此外,还探讨了一个从26进制字符串转换为十进制数的问题,并给出了一种Java实现方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不是很难,但是 lz 很菜。。。
第一题
这里写图片描述
这里写图片描述

题解

#include <iostream>
#include <stdlib.h>  
#include <stdio.h>  
#include <queue>
#include <string.h>
#define N 1000
using namespace std; 
typedef struct BiTNode    
{    
    int data;    
    struct BiTNode *lchild,*rchild;    
} BiTNode,* BITree;      
void LevelOrderTraversal(BiTNode* R1){
    queue<BiTNode*> Q;
    int flag=0;
    BiTNode* T;
    T=R1;
    int i=0;
    if (R1==NULL) {
        return;
    }
    Q.push(T);  
    while (!Q.empty()) {
        T=Q.front();
            if (!flag) {
                    flag=1;
                }else {
                    cout<<" ";
                }
                cout<<T->data;
                Q.pop();
            if (T->lchild!=NULL) {
                Q.push(T->lchild);
            }       
            if (T->rchild!=NULL) {
                Q.push(T->rchild);
            }   

    }
}

BiTNode* createBiTree(int *pre, int *in, int n)  
{  
    int i = 0;  
    int n1 = 0,n2 = 0;  
    int m1 = 0,m2 = 0;  
    BiTNode*node = NULL;  
    int lpre[N],rpre[N];  
    int lin[N],rin[N];  
    if (n == 0)  
    {  
        return NULL;  
    }  
    node = (BiTNode*)malloc(sizeof(BiTNode));    
    if (node==NULL)    
    {    
        return NULL;    
    }    
    memset(node,0,sizeof(BiTNode));   
    node->data = pre[0];  
    for (i = 0;i<n;i++)  
    {  
        if ((i<=n1)&&(in[i]!=pre[0]))  
        {  
            lin[n1++] = in[i];  
        }  
        else if(in[i]!=pre[0])  
        {  
            rin[n2++] = in[i];  
        }  
    }  
    for (i = 1;i < n;i++)  
    {  
        if (i< (n1+1)) 
        {  
            lpre[m1++] = pre[i];  
        }  
        else  
        {  
            rpre[m2++] = pre[i];  
        }  
    }  
    node->lchild = createBiTree(lpre,lin,n1);  
    node->rchild = createBiTree(rpre,rin,n2);  

    return node;  
}  

int main()  
{  
    int m;
    cin>>m;
    int preNode[m];  
    int inNode[m];  
    int ch;  
    BiTNode* root=NULL;  
    for(int i=0;i<m;i++){
        cin>>preNode[i];
    }
    for(int i=0;i<m;i++){
        cin>>inNode[i];
    }
    root = createBiTree(preNode,inNode,m);  
    LevelOrderTraversal(root);
    return 0;  
}  

第二题

是一个进制转换,以 0-25 来表示 a-z,26 进制输入一个字符串将其转换成 10 进制并输出,lz 用 java 写的,但是只过了 80% 的测试用例。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        String buffer=null;
        Scanner sc=new Scanner(System.in);
        while(sc.hasNextLine())
        {
            buffer=sc.nextLine();

            if(buffer.startsWith("a")){
                System.out.println(0);
            }
            else{
                System.out.println(letterToNum(buffer));
            }



        }


    }

    public static long letterToNum(String str) {

        char[] letter = str.toUpperCase().toCharArray(); // 拆分字符串
        //System.out.println(letter[0]);
        long reNum = 0;
        int power = 1;
        int num = letter.length;
        //System.out.println(num);
        // 得到最后一个字母的尾数值
        reNum += charToNum(letter[num - 1]);
        //System.out.println(reNum);

        if (num >= 2) {
            for (int i = num - 1; i > 0; i--) {
                power = 1;
                for (int j = 0; j < i; j++) // 幂,j次方,应该有函数
                {
                    power *= 26;
                }
                reNum += (power * (charToNum(letter[num - i - 1]))); // 最高位需要加1,中间位数不需要加一

            }
        }
        return reNum;
    }
    private static int charToNum(char ch) {

        return ch - 'A';
    }

}

第三题没来地看,但是有人说是leetcode的原题,平时代码敲得少。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值