Javascript 尝试过的二叉树示例得到的输出为一个对象,如何将这个对象的值放入一个数组中进行进一步的问题
问题陈述 您将看到一棵树,其中N个节点的根为1。N个节点中的每个节点都有一些与之相关的特殊编号Se。每个节点也有一定的功率。树的每个节点的功率定义为节点(包括该节点)子树中重节点的数量。重节点是指其特殊数的除数之和为3的倍数的节点。您将收到Q查询 有两种类型的查询:Javascript 尝试过的二叉树示例得到的输出为一个对象,如何将这个对象的值放入一个数组中进行进一步的问题,javascript,algorithm,typescript,tree,binary-tree,Javascript,Algorithm,Typescript,Tree,Binary Tree,问题陈述 您将看到一棵树,其中N个节点的根为1。N个节点中的每个节点都有一些与之相关的特殊编号Se。每个节点也有一定的功率。树的每个节点的功率定义为节点(包括该节点)子树中重节点的数量。重节点是指其特殊数的除数之和为3的倍数的节点。您将收到Q查询 有两种类型的查询: 类型1:更新节点的特殊编号 类型2:告诉某个节点的功率 输入格式 第一行:两个空格分隔的整数N和Q,分别表示树中的节点数和查询数。接下来的N-1行中的每一行:两个空格分隔的整数U和V,表示它们之间有一条边。 下一行:N个空格分隔
- 类型1:更新节点的特殊编号
- 类型2:告诉某个节点的功率
- 对于给定的节点,我们需要获取它的所有子节点
- 对于每个子节点,我们需要找到该节点编号的除数
- 我们需要求除数的和,并确定它是否是3的倍数
5 5
1 2
1 3
3 4
3 5
16 8 17 3 18
2 1
2 3
1 3 7
2 1
2 3
样本输出
3
2
2
1
我试过的代码
function BinarySearchTree() {
this.root = null;
}
BinarySearchTree.prototype.insertNode = function (val) {
var node = {
data : val,
left : null,
right : null
};
var currentNode;
if (!this.root) {
this.root = node;
} else {
currentNode = this.root;
while (currentNode) {
if (val < currentNode.data) {
if (!currentNode.left) {
currentNode.left = node;
break;
} else {
currentNode = currentNode.left;
}
} else if (val > currentNode.data) {
if (!currentNode.right) {
currentNode.right = node;
break;
} else {
currentNode = currentNode.right;
}
} else {
break;
}
}
}
};
var BST = new BinarySearchTree();
BST.insertNode(16);
BST.insertNode(8);
BST.insertNode(17);
BST.insertNode(3);
BST.insertNode(18);
console.log(BST);
现在我想以[16,8,17,3,18]的形式传递数组中的数据
要找到每个节点的除数,必须检查除数是否可以被3整除。怎么做
这是正确的做法吗?我用以下方法尝试了这个问题: a) 为了获得每个特殊数字的因子总和,请使用筛选方法预静音,如果总和%3==0,则为该节点放入1
b) 应用遍历方法(dfs)来获取下面所有节点(包括该节点)的总和。需要O(n)复杂度。
c) 对于每一个类型为2的查询:我可以用O(1)给出答案。但对于类型1:query,在最坏的情况下,我的代码的复杂性为O(n)。因为对于每个节点,它正在更新每个连续父节点的计数。因此,复杂性是O(q*n),这远远超过了查询的顺序10^6,而n的顺序是10^6 你有想要的结果的例子吗?是的,我可以分享问题陈述的屏幕截图吗?示例输入5 5 1 2 1 3 4 3 5 16 8 17 3 18 2 1 2 3 1 3 1 3 7 2 1 2 3示例输出3 2 1我刚刚编辑了问题并包含了示例输出,即使我对问题陈述感到很困惑,也请让我键入整个问题问题在这里
BinarySearchTree {
root:
{ data: 16,
left: { data: 8, left: [Object], right: null },
right: { data: 17, left: null, right: [Object] } } }