BM30 二叉搜索树与双向链表

image
原题链接

思路分析

通过给定的返回值我们就可以发现双向链表遍历的结果顺序是中序遍历。那么我们就可以先利用之前中序遍历的方法,获取到每个节点,再遍历每个节点,将它们的指向进行更改即可,需要注意的是要对第一个和最后一个节点做处理

代码参考

// 使用中序遍历获得结果,之后再对每一个节点做处理
function Convert (pRootOfTree) {
  // write code here
  const result = []
  const dfs = (root) => {
    if (!root) return
    dfs(root.left)
    result.push(root)
    dfs(root.right)
  }
  dfs(pRootOfTree)
  for (let i = 0; i < result.length; i++) {
    // 对第一个节点和最后一个节点做处理
    i === 0 ? result[i].left = null : result[i].left = result[i - 1]
    i === result.length - 1 ? result[i].right = null : result[i].right = result[i + 1]
  }
  return result[0]
}
posted @ 2023-01-02 21:56  含若飞  阅读(15)  评论(0编辑  收藏  举报