Домашнее задание о бинарных деревьях - PullRequest
0 голосов
/ 05 мая 2020

Привет всем, у меня есть вопрос по поводу моей домашней работы.

Это мой вопрос: выполните следующий метод, чтобы он возвращал истину, если деревья, на которые указывает параметр 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

я не понимаю, в чем проблема? где моя ошибка

Спасибо за помощь.

1 Ответ

0 голосов
/ 05 мая 2020

Ошибка здесь:

if (node2.left != null && node1.left != null && node1.right != null && node1.key != node2.key || node1.key == node2.key) {

Измените это, чтобы добавить также && node2.right! = Null

if (node2.left != null && node1.left != null && node1.right != null && node2.right != null && node1.key != node2.key || node1.key == node2.key) {

Из-за этого вы вызывали метод treeEqual с нулевое значение, когда node2.right было null, что вызывало исключение нулевого указателя.

...