【发布时间】:2021-09-22 19:02:07
【问题描述】:
如何降低 while 循环中 if 语句的认知复杂性?这是用于将节点插入线程二叉搜索树的代码。这是我的操作逻辑,但 ide 给了我这些问题。我该如何解决?
重构此方法以将其认知复杂度从 18 降低到允许的 15。 [+11 个地点]
减少此循环中的 break 和 continue 语句总数,最多使用一个。 [+2 个地点]
这是代码
public class threaded {
class Node{
Node left;
boolean lthread;
int data;
boolean rthread;
Node right;
Node(int data){
left = null;
lthread = true;
this.data = data;
rthread = true;
right = null;
}
}
Node root = null;
void insert(int data){
Node ptr = root;
Node par = null; // parent of the node to be inserted
while (ptr != null){
if (data == ptr.data){
System.out.println("Duplicate key");
return;
}
par = ptr;
if (data < ptr.data){
if (!ptr.lthread){
ptr = ptr.left;
}
else{
break;
}
}
else {
if (!ptr.rthread){
ptr = ptr.right;
}
else{
break;
}
}
Node tmp = new Node(data); // creating a new node
if (root == null){
root = new Node(data);
}
else if (data < par.data){
tmp.left = par.left;
tmp.right = par;
par.lthread = false;
par.left = tmp;
}
else if (data > par.data){
tmp.left = par;
tmp.right = par.right;
par.rthread = false;
par.right = tmp;
}
}
}
【问题讨论】:
-
如果你不知道这意味着什么,那么我想知道你为什么关心它?
-
这不是您的代码的问题,必须修复它才能正确运行。这是 IDE 中的一个可选设置,旨在在它认为人类难以阅读代码时向您发出警告。如果您发现代码不难理解,那么您无需关心它,您可以在 IDE 设置中禁用或调整它。 (它不起作用,所以也许它是难以遵循?)
-
你不需要在循环内检查root是否为空,因为你之前设置了
ptr = null。重复的else break也可能是你可以避免的