输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
要求不能创建任何新的结点,只能调整树中结点指针的指向。
注意:
需要返回双向链表最左侧的节点。 例如,输入下图中左边的二叉搜索树,则输出右边的排序双向链表。
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]]
}
}
};