JS | 教练,我想做习题14

本文是前端开发工程师毛小悠的JavaScript习题系列,通过解决最小路径问题和二叉树的前序、中序、后序遍历来提升JavaScript技能。文中提供了题目描述和多种解题参考答案,鼓励限时训练和互动交流。

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

🚀 前言

大家好呀,我是毛小悠,可以叫我二毛,在家中排行老二,是一名前端开发工程师。

本系列文章旨在通过练习来提高JavaScript的能力,一起愉快的做题吧。😀😀😀

以下每道题,二毛我都有尝试做一遍。建议限时训练,比如限定为半小时,如果半小时内想不出来,可以结合文章末尾的参考答案来思考。

可以在下方评论区留言或者加我的微信:code_maomao。期待你的到来。

求关注求点赞👍~~~😘😘😘

📖 题目1:最小路径单位

您会得到一个由随机数组成的正方形,如下所示:

var square = [
    [1,2,3],
    [4,8,2],
    [1,5,3]];

您的工作是计算从左上角到给定坐标的最小总成本。您只能向右或向下移动。

在上面的示例中,最小路径为:

var square = [
    [1,2,3],
    [_,_,2],
    [_,_,3]];

总共给出11个。包括开始和结束位置。

注意:坐标标记为水平x和垂直y。

习题代码:

function minPath(grid, x, y) {
   
    
}

📖 题目2:二叉树遍历

给定二叉树的根节点(但不一定是二叉搜索树),编写三个函数,这些函数将按pre-order,order和post-order打印树。

节点具有以下属性:

var data; // A number or string.
Node left; // Undefined if there is no left child.
Node right; // Undefined if there is no right child.

一棵树的结构如下:

data Tree a = Nil | Node (Tree a) a (Tree a)

pre-order意味着我们
1.)拜访根。
2.)遍历左侧子树(左侧节点)
3.)遍历右侧子树(右侧节点)。

按order顺序表示我们
1.)遍历左侧子树(左侧节点)
2.)访问根。
3.)遍历右侧子树(右侧节点)。

post-order订单意味着我们
1.)遍历左侧子树(左侧节点)
2.)遍历右侧子树(右侧节点。)
3.)访问根。

假设我们有三个节点。

var a = new Node("A");
var b = new Node("B");
var c = new Node("C");

a.left = b;
a.right = c;

然后,preOrder(a)应该返回[“ A”,“ B”,C“]
inOrder(a)应该返回[” B“,” A“,” C“]
postOrder(a)应该返回[” B“, “ C”,A“]

如果我们这样做会怎样?

var d = new Node("D");
c.left = d;

preOrder(a)应该返回[“ A”,“ B”,“ C”,“ D”]
inOrder(a)应该返回[“ B”,“ A”,“ D”,“ C”]
postOrder(a)应该返回[“ B”,“ D”,“ C”,“ A”]

习题代码:

/*
A Node has the following properties:
var data; // A number or string.
Node left; // Undefined if there is no left child.
Node right; // Undefined if there is no right child.
*/

// 1.) Root node, 2.) traverse left subtree, 3.) traverse right subtree.
function preOrder(node)
{
   
}

// 1.) Traverse left subtree, 2.) root node, 3.) traverse right subtree.
function inOrder(node)
{
   
}

// 1.) Traverse left subtree, 2.) traverse right subtree, 3.) root node.
function postOrder(node)
{
   
}

答案

🍗 题目1的答案

参考答案1:

function minPath(grid, x, y) {
   
  const [X, Y] = [0, 1];
  const row = new Array(x+1).fill(0);
  for (let i = 0; i <= y; ++i) {
   
    row[0] += grid[i][0];
    for (let j = 1; j <= x; ++j) {
   
      if (i === 0) {
   
        
      }
      if (i === 0) {
   
        row[j] = row[j-1] + grid[i][j];  
      } else {
   
        row[j] = Math.min(row[j-1], row[j]) + grid[i][j];
      }
    }
  }
  return row.pop();
}

参考答案2:

function minPath(grid, x, y) {
   
  grid = grid.map(row => row.slice());
  let row, col;
  for (row 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值