【发布时间】:2023-03-17 06:55:01
【问题描述】:
我正在为二叉搜索树编写一些代码,其中每个节点都有一个left 和一个right 子指针。在我的delete 函数中,我有以下代码。
if (!current.left && !current.right) {
if (parent.left === current) {
parent.left = null;
} else {
parent.right = null;
}
} else {
if (parent.left === current) {
parent.left = current.left ? current.left : current.right;
} else {
parent.right = current.left ? current.left : current.right;
}
}
我有两次使用以下语法的块:
if (someCondition) {
parent.left = x;
} else {
parent.right = x;
}
有没有更简洁的方法来写这个(可能是单行)?我不确定是否可以在这里使用三元运算符语法,因为我在if 块中有parent.left = x,在else 块中有parent.right = x。我不喜欢这个函数中使用的所有这些if-else 块。
这里是完整的代码sn-p。
const getInOrderSuccessor = (root, node) => {
let successorParent = null;
let successor = null;
let previous = null;
let current = root;
while (current) {
if (node.value < current.value) {
successorParent = previous;
successor = current;
previous = current;
current = current.left;
} else {
previous = current;
current = current.right;
}
}
return [successor, successorParent];
};
const deleteNode = (root, value) => {
let current = root;
let parent = null;
while (current) {
if (value === current.value) break;
parent = current;
current = value < current.value ? current.left : current.right;
}
// If 2 child, deal with that first
if (current.left && current.right) {
const [successor, successorParent] = getInOrderSuccessor(root, current);
current.value = successor.value;
current = successor;
parent = successorParent;
}
if (!current.left && !current.right) {
if (parent.left === current) {
parent.left = null;
} else {
parent.right = null;
}
} else {
if (parent.left === current) {
parent.left = current.left ? current.left : current.right;
} else {
parent.right = current.left ? current.left : current.right;
}
}
};
【问题讨论】:
标签: javascript if-statement binary-search-tree conditional-operator