二叉树展开为链表

解题思路:

- 先进行先序遍历;
- 再用先序遍历的结果构造链表;

复杂度:

- 时间复杂度:O(n),其中 n 是二叉树的节点数;前序遍历的时间复杂度是 O(n),前序遍历之后,需要对每个节点更新左右子节点的信息,时间复杂度也是 O(n);
- 空间复杂度:O(n),其中 n 是二叉树的节点数;空间复杂度取决于栈(递归调用栈或者迭代中显性使用的栈)和存储前序遍历结果的列表的大小,栈内的元素个数不会超过 n,前序遍历列表中的元素个数是 n;

代码实现:

var flatten = function (root) {
  let list = []

  // 先序遍历
  preTravese(root, list)

  // 拿先序遍历的结果构造二叉树
  for (let i = 1; i < list.length; i++) {
    const prev = list[i - 1] // prev 就是root
    const cur = list[i]
    prev.left = null
    prev.right = cur
  }
};

function preTravese(root, list) {
  if (root !== null) {
    list.push(root)
    preTravese(root.left, list)
    preTravese(root.right, list)
  }
}
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 二叉树展开为链表
  2. 2. 解题思路:
  3. 3. 复杂度:
  4. 4. 代码实现: