有没有办法在树结构中添加指向父级的反向指针?
Is there a possible way to add back pointer to parent in tree structure?
我正在尝试创建一个看起来像二叉树的结构。我需要在哪里设置反向指针以便每个节点都可以链接到它的父节点,这对性能有何影响?
function Node(expression, trueStatement, falseStatement) {
this.expression = expression;
this.trueStatement = trueStatement
this.falseStatement = falseStatement
this.left = null;
this.right = null;
this.back = null;
}
function BinarySearchTree() {
this.root = null;
}
BinarySearchTree.prototype.push = function(state, expression, trueStatement, falseStatement) {
var root = this.root;
if (trueStatement == "") {
trueStatement = false;
}
if (falseStatement == "") {
falseStatement = false;
}
if (!root) {
this.root = new Node(expression, trueStatement, falseStatement);
return;
}
var currentNode = root;
var newNode = new Node(expression, trueStatement, falseStatement);
while (currentNode) {
if (state) {
if (!currentNode.left) {
currentNode.left = newNode;
break;
} else {
currentNode = currentNode.left;
}
} else {
if (!currentNode.right) {
currentNode.right = newNode;
break;
} else {
currentNode = currentNode.right;
}
}
}
}
var bst = new BinarySearchTree();
bst.push(true, "IIF()", "", "@user");
bst.push(false, "IIF()1", "@user", "");
bst.push(true, "IIF()2", "@user", "");
目标是每个节点都应该链接到它们的父节点。
将 属性 parent/back 添加到您的 Node 对象并在创建 Node 时填充。
以及你在哪里
currentNode.left = newNode;
同时添加
currentNode.left = newNode;
newNode.back = currentNode;
在其他地方实现相同的逻辑
我正在尝试创建一个看起来像二叉树的结构。我需要在哪里设置反向指针以便每个节点都可以链接到它的父节点,这对性能有何影响?
function Node(expression, trueStatement, falseStatement) {
this.expression = expression;
this.trueStatement = trueStatement
this.falseStatement = falseStatement
this.left = null;
this.right = null;
this.back = null;
}
function BinarySearchTree() {
this.root = null;
}
BinarySearchTree.prototype.push = function(state, expression, trueStatement, falseStatement) {
var root = this.root;
if (trueStatement == "") {
trueStatement = false;
}
if (falseStatement == "") {
falseStatement = false;
}
if (!root) {
this.root = new Node(expression, trueStatement, falseStatement);
return;
}
var currentNode = root;
var newNode = new Node(expression, trueStatement, falseStatement);
while (currentNode) {
if (state) {
if (!currentNode.left) {
currentNode.left = newNode;
break;
} else {
currentNode = currentNode.left;
}
} else {
if (!currentNode.right) {
currentNode.right = newNode;
break;
} else {
currentNode = currentNode.right;
}
}
}
}
var bst = new BinarySearchTree();
bst.push(true, "IIF()", "", "@user");
bst.push(false, "IIF()1", "@user", "");
bst.push(true, "IIF()2", "@user", "");
目标是每个节点都应该链接到它们的父节点。
将 属性 parent/back 添加到您的 Node 对象并在创建 Node 时填充。 以及你在哪里
currentNode.left = newNode;
同时添加
currentNode.left = newNode;
newNode.back = currentNode;
在其他地方实现相同的逻辑