这是problem

  1. 创建新树 node
  2. 分配根->向左->正当
  3. 分配根->权利->左边

解决方案是

function invertTree(root) {
  const queue = [root];
  while (queue.length) {
    const n = queue.pop();
    if (n != null) {
      [n.left, n.right] = [n.right, n.left];
      queue.push(n.left, n.right);
    }
  }
  return root;
};

然而,我感到困惑的是,将队列更改为root.

推荐答案

正如问题所述,您必须返回根.但在此之前,你必须把它颠倒过来.

逻辑是保留一个名为queue的数组,该数组存储the next 101 to be inverted,并在while循环中迭代执行.

首先,该算法从填充根的队列开始,因此为const queue = [root].

然后,它得到队列的最后一个元素(有.pop()个),如果它不是空 node ,则将其称为n,并通过执行以下操作反转其左分支和右分支:[n.left, n.right] = [n.right, n.left].这是我们对root进行更改的时刻.

通过从queue中弹出它,我们可以直接访问初始root对象的引用,无论我们对其 node 做什么更改都会影响它.


之后,该算法将root个左右 node 推到queue个,以反转.它使循环再次运行,在每个分支中执行相同的逻辑.最后,它总是指向引用root的 node ,这解释了它为什么会间接更改.

当队列长度为0时,它停止运行,即当队列不再推送 node 时,意味着树已成功反转.

Javascript相关问答推荐

使用print This时, map 容器已在LeafletJS中初始化

react 路由加载程序行为

我在这个黑暗模式按钮上做错了什么?

Cypress -使用commands.js将数据测试id串在一起失败,但在将它们串在一起时不使用命令有效

在Angular中将样式应用于innerHTML

有没有可能使滑动img动画以更快的速度连续?

简单的PayPal按钮集成导致404错误

如何避免页面第一次加载时由于CSS样式通过JavaScript更改而出现闪烁

您能在卸载程序(QtInsteller框架)上添加WizardPage吗?

用于在路径之间移动图像的查询

第三方包不需要NODE_MODULES文件夹就可以工作吗?

Angular 形式,从DOM中删除不会删除指定索引处的内容,但会删除最后一项

如何在Bootstrap中减少网格系统中单个div的宽度

在FAQ Accodion应用程序中使用React useState时出现问题

为什么这个最小Angular 的Licial.dev设置不起作用?

AstroJS混合模式服务器终结点返回404

由于http.get,*ngIf的延迟很大

如何在不将整个文件加载到内存的情况下,在Node.js中实现Unix粘贴命令?

如何从图表中映射一组图表-js使用REACT

Reaction:从子组件调用父组件中的函数