Привет всем, у меня есть вопрос по поводу моей домашней работы.
Это мой вопрос: выполните следующий метод, чтобы он возвращал истину, если деревья, на которые указывает параметр node1 и node2, равны.
Это мой ответ:
` public static boolean treeEqual(TreeNode node1, TreeNode node2) {
if (node1.key == node2.key && node1.left == null && node2.left == null && node1.right == null && node2.right == null) {
return true;
} else {
if (node1 == null || node2 == null) {
return false;
} else {
boolean f = false;
boolean y = false;
if (node2.left != null && node1.left != null && node1.right != null && node1.key != node2.key || node1.key == node2.key) {
TreeNode ptrleft1 = node1.left;
TreeNode ptrright1 = node1.right;
TreeNode ptrleft2 = node2.left;
TreeNode ptrright2 = node2.right;
if (ptrleft1.key == ptrleft2.key && ptrleft1.left == ptrleft2.left && ptrleft1.right == ptrleft2.right) {
f = true;
treeEqual(ptrright1, ptrright2);
} else {
f = false;
}
if (ptrright1.key == ptrright2.key && ptrright1.left == ptrright2.left && ptrright1.right == ptrright2.right) {
y = true;
treeEqual(ptrright1, ptrright2);
} else {
y = false;
}
}
if (f == true && y == true) {
f = true;
} else {
f = false;
}
return f;
}
}
}`
Этот код не работает, это моя ошибка:
Исключение типа java .lang.NullPointerException было сообщено при выполнении этого строка:
if (node1.key== node2.key&& node1.left == null && node2.left == null && node1.right == null && node2.right == null) {
но в intellij это работает, я не понимаю, в чем проблема.
1. вопрос 1 исправлен, теперь работает
Это мой вопрос:
Завершите следующий метод, чтобы он возвращал указатель на узел, содержащий наибольшее значение данных в дереве, на которое указывает параметр ptr, или null, если ptr указывает на пустое дерево: это мой код:
if (ptr == null) {
return ptr;
} else {
TreeNode ptrright = ptr.right;
TreeNode ptrleft = ptr.left;
if (ptrright != null && ptrleft != null&&ptr!=null) {
TreeNode ptrrightmax = ptrToMax(ptrright);
TreeNode ptrleftmax = ptrToMax(ptrleft);
if (ptr.data> ptrrightmax.data&& ptr.data> ptrleftmax.data) {
return ptr;
} else {
if (ptrrightmax.data> ptrleftmax.data&&ptrrightmax.data>ptr.data) {
return ptrrightmax ;
} else {
if(ptrleftmax.data>ptrrightmax.data&&ptrleftmax.data>ptr.data)
return ptrleftmax ;
}
}
}
}
return ptr
я не понимаю, в чем проблема? где моя ошибка
Спасибо за помощь.