iOS 算法面试题(字符串逆序输出、二叉树、归并排序)~demo

//联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄

一、字符串逆序输出

1、实现一个字符串“how are you”的逆序输出(编程语言不限)。如给定字符串为“hello world”,输出结果应当为“world hello”。

[cpp] view plain copy

intspliterFunc(char*p) {

charc[100][100];

inti =0;

intj =0;

while(*p !='\0') {

if(*p ==' ') {

i++;

j =0;

}else{

c[i][j] = *p;

j++;

}

p++;

}

for(intk = i; k >=0; k--) {

printf("%s", c[k]);

if(k >0) {

printf(" ");

}else{

printf("\n");

}

}return0;

}

二、二叉树

/**

二叉树的先序遍历为FBACDEGH,中序遍历为:ABDCEFGH,请写出这个二叉树的后序遍历结果。

ADECBHGF

先序+中序遍历还原二叉树:先序遍历是:ABDEGCFH中序遍历是:DBGEACHF

首先从先序得到第一个为A,就是二叉树的根,回到中序,可以将其分为三部分:

左子树的中序序列DBGE,根A,右子树的中序序列CHF

接着将左子树的序列回到先序可以得到B为根,这样回到左子树的中序再次将左子树分割为三部分:

左子树的左子树D,左子树的根B,左子树的右子树GE

同样地,可以得到右子树的根为C

类似地将右子树分割为根C,右子树的右子树HF,注意其左子树为空

如果只有一个就是叶子不用再进行了,刚才的GE和HF再次这样运作,就可以将二叉树还原了。

*/

三、归并排序

voidmerge(intsourceArr[],inttempArr[],intstartIndex,intmidIndex,intendIndex) {

inti = startIndex;

intj = midIndex +1;

intk = startIndex;

while(i != midIndex +1&& j != endIndex +1) {

if(sourceArr[i] >= sourceArr[j]) {

tempArr[k++] = sourceArr[j++];

}else{

tempArr[k++] = sourceArr[i++];

}

}

while(i != midIndex +1) {

tempArr[k++] = sourceArr[i++];

}

while(j != endIndex +1) {

tempArr[k++] = sourceArr[j++];

}

for(i = startIndex; i <= endIndex; i++) {

sourceArr[i] = tempArr[i];

}

}

voidsort(intsouceArr[],inttempArr[],intstartIndex,intendIndex) {

intmidIndex;

if(startIndex < endIndex) {

midIndex = (startIndex + endIndex) /2;

sort(souceArr, tempArr, startIndex, midIndex);

sort(souceArr, tempArr, midIndex +1, endIndex);

merge(souceArr, tempArr, startIndex, midIndex, endIndex);

}

}

intmain(intargc,constchar* argv[]) {

intnumArr[10] = {86,37,56,29,92,73,15,63,30,8};

inttempArr[10];

sort(numArr, tempArr,0,9);

for(inti =0; i <10; i++) {

printf("%d, ", numArr[i]);

}

printf("\n");

return0;

}

谢谢!!!

你可能感兴趣的:(iOS 算法面试题(字符串逆序输出、二叉树、归并排序)~demo)