Печать границы двоичного дерева - PullRequest
0 голосов
/ 13 июля 2020

Печать границы двоичного дерева в java. (Против часовой стрелки от root) разделила задачу на три части.

  1. первая печать левой границы поддерева без самого нижнего листа.
  2. печать всех листьев слева направо.
  3. сохранение всех данных узлов дерева в строке для правой границы поддерева без самого нижнего листа, как в части 1. сохранение в строке, так как узлы будут перемещаться сверху вниз, и я хочу, чтобы снизу вверх было в режиме против часовой стрелки. затем напечатайте строку от конца до первого символа. ...

Тестовый пример: 1 2 3 -1 5 6 -1 -1 -1 -1 -1 (ввод порядка уровней с -1, обозначающим отсутствие узла)

Ошибка : Ошибка выполнения (NZE C)

Exception in thread main java.lang.NullPointerException at Solution.pleft(Solution.java:31) at      (first if condition in pleft method)
 Solution.pleft(Solution.java:37) at
 Solution.pleft(Solution.java:37) at.... (pleft(root.left); in  pleft method)
 Solution.solve(Solution.java:19) at.... (pleft(room); statement in solve method)
 Runner.main(Runner.java:60)

Код:

    /*
Class used for BinaryTreeNode

class BinaryTreeNode<T> {
    T data;
    BinaryTreeNode<T> left;
    BinaryTreeNode<T> right;

    BinaryTreeNode(T data) {
        this.data = data;
        this.left = null;
        this.right = null;
    }
}
*/

public class Solution {
    public static void solve(BinaryTreeNode<Integer> root){
        if(root==null)
            return;
        System.out.print(root.data+" ");
        pleft(root.left);
        leaf(root.left);
        leaf(root.right);
        StringBuffer s=new StringBuffer();
        s=pright(root.right,s);
        if(s.length()!=0){
            for(int i=s.length()-1;i>-1;i--){
                System.out.print(s.charAt(i)+" ");
            }
        }
    }
    static void pleft(BinaryTreeNode<Integer> root){
        if(root==null){
            return;
        }
        if(root.left==null && root.right==null)
            return;
        System.out.print(root.data+" ");
        if(root.left==null){
            pleft(root.right);
        }
        pleft(root.left);
    }
    static StringBuffer pright(BinaryTreeNode<Integer> root, StringBuffer s){// store in string then print
        if(root==null){
            return new StringBuffer();
        }
        if(root.left==null && root.right==null)
            return s;
        s.append(Integer.toString(root.data));
        if(root.right==null){
            return pright(root.left,s);
        }
        return pright(root.right,s);

    }
    static void leaf(BinaryTreeNode<Integer> root){
        if(root==null) return;
        if(root.left==null&&root.right==null){
            System.out.print(root.data+" ");
        }
        leaf(root.left);
        leaf(root.right);
    }
}
...