不是很难,但是 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的原题,平时代码敲得少。。。