剑指offer_二叉搜索树与双向链表

104 阅读1分钟

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。

要求不能创建任何新的结点,只能调整树中结点指针的指向。

注意:

需要返回双向链表最左侧的节点。 例如,输入下图中左边的二叉搜索树,则输出右边的排序双向链表。

code

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {TreeNode}
 */
var convert= function(root) {
   if (!root) return null
   let sides = dfs(root)
   return sides[0]
   
   function dfs(root) {
       if (!root.left && !root.right) return [root,root]
       if (root.left && root.right) {
           let lside = dfs(root.left)
           let rside = dfs(root.right)
           lside[1].right = root, root.left = lside[1]
           root.right = rside[0], rside[0].left = root
           return [lside[0],rside[1]]
       }
       if (root.left) {
           let lside = dfs(root.left)
           lside[1].right = root, root.left = lside[1]
           return [lside[0],root]
       }
       if (root.right) {
           let rside = dfs(root.right)
           root.right = rside[0], rside[0].left = root
           return [root,rside[1]]
       }
   }
};