function BinarySearchTreeNode(list) {
let root
list.forEach((e) => {
if (root == null) {
root = new TreeNode(e);
} else {
instert(root, new TreeNode(e));
}
})
function TreeNode(val, left, right) {
this.val = val;
this.left = left;
this.right = right;
}
function instert(node, newNode) {
if (newNode.val < node.val) {
if (node.left == null) {
node.left = newNode;
} else {
instert(node.left, newNode);
}
} else {
if (node.right == null) {
node.right = newNode;
} else {
instert(node.right, newNode);
}
}
}
return root
}
const tree1 = BinarySearchTreeNode([5, 3, 1, 4, 8, 6, 9])
var inorderTraversal = function (root) {
const res = [];
let predecessor = null;
while (root) {
if (root.left) {
predecessor = root.left;
while (predecessor.right && predecessor.right !== root) {
predecessor = predecessor.right;
}
if (!predecessor.right) {
predecessor.right = root;
root = root.left;
}
else {
res.push(root.val);
predecessor.right = null;
root = root.right;
}
}
else {
res.push(root.val);
root = root.right;
}
}
return res;
};
const traversalRes = inorderTraversal(tree1)
console.log(traversalRes)