剑客练习
1,在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数
输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
一维数组和二维数组类似矩阵 从a[i][j]开始比较
function Find(target, array) {
let i = 0;
let j = array[i].length - 1;
while (i < array.length && j >= 0) {
if (array[i][j] < target) {
i++;
} else if (array[i][j] > target) {
j--;
} else {
return true;
}
}
return false;
}
,2,请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
function replaceSpace(str)
{
return str.replace(/\s/g,'%20')
}
str.repalce(/\s/g)是替换空格的意思
除了空格 可以后面填写替换别的东西 比如汉字 "我","你"
3 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
function printListFromTailToHead(head)
{
if(!head){
return 0;
}
else{
var arr=new Array();
for(var q=head;q;q=q.next){
arr.push(q.val);
}
}
arr.reverse();
return arr;
}
第一种先判断头是否为空,不为空时用q指针 arr数组push结尾添加值。最后把数组翻转
第二种
function printListFromTailToHead(head)
{
var p=head;
var result=[];
while(p){
result.unshift(p.val)
p=p.next;
}
return result;
}
用unshift进行头部添加 直接实现
4输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
function reConstructBinaryTree(pre, vin)
{
// write code here
if(pre.length==0||vin.length==0){
return null;
};
let index=vin.indexOf(pre[0]),
left=vin.slice(0,index),
right=vin.slice(index+1);
return {
val:pre[0],
//递归左右子树的前序、中序
left:reConstructBinaryTree(pre.slice(1,index+1),left),
right:reConstructBinaryTree(pre.slice(index+1),right)
};
}
本题主要考察了二叉树的遍历,先复习下
前序遍历(VLR):
1.访问根节点
2.前序遍历左子树
3.前序遍历右子树
中序遍历(LVR):
1.中序遍历左子树
2.访问根节点
3.中序遍历右子树
后序遍历(LRV):
1.后序遍历左子树
2.后序遍历右子树
3.访问根节点
总之,做这种有关树、链表的题一定要有递归的思想,总之该题的解题思路就是四步,具体思路可以参考这里
1 确定根,确定左子树,确定右子树。
2 在左子树中递归。
3 在右子树中递归。
4 打印当前根。

浙公网安备 33010602011771号