graphViz = (tree) => {
let result = `digraph{`;
let keys = new Set();
let declare = (tree) => {
let key = tree.node.key;
if (keys.has(key)) return;
let lab = tree.node.key;
result += key + `[shape="record" label="{${lab}|p=${tree.node.priority}}"];\n`;
keys.add(key)
}
let count = 0;
let traverse = (root) => {
if (root.node) {
declare(root);
if (root.node.left.node) {
declare(root.node.left);
result += `${root.node.key} -> ${root.node.left.node.key} ;\n`;
traverse(root.node.left)
}
else {
result += 'null'+(++count)+'[shape = none, label=""];\n';
result += `${root.node.key} -> ${'null'+count} [arrowhead="tee"];\n`;
}
if (root.node.right.node) {
declare(root.node.right);
result += `${root.node.key} -> ${root.node.right.node.key} ;\n`;
traverse(root.node.right);
}
else {
result += 'null'+(++count)+'[shape = none, label=""];\n';
result += `${root.node.key} -> ${'null'+count} [arrowhead="tee"];\n`;
}
}
}
traverse (tree)
return result + "}"
}