题目
- 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- leetcode链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/
思路
- 先中序遍历进行right指向
- 再从头开始遍历,依据right指向进行left指向
- 头尾互连
代码
/**
* // Definition for a Node.
* function Node(val,left,right) {
* this.val = val;
* this.left = left;
* this.right = right;
* };
*/
/**
* @param {Node} root
* @return {Node}
*/
var treeToDoublyList = function(root) {
if (!root) return null
if (!root.left && !root.right) {
root.left = root
root.right = root
return root
}
let firstNode = null
let lastNode = null
let prevNode = null
function order(node) {
if (!node) return
order(node.left)
if (!firstNode) firstNode = node
if (!prevNode) {
prevNode = node
} else {
prevNode.right = node
prevNode = node
}
order(node.right)
}
order(root)
let node = firstNode
while (node.right) {
node.right.left = node
node = node.right
lastNode = node
}
firstNode.left = lastNode
lastNode.right = firstNode
return firstNode
};