Печать границы двоичного дерева в java. (Против часовой стрелки от root) разделила задачу на три части.
- первая печать левой границы поддерева без самого нижнего листа.
- печать всех листьев слева направо.
- сохранение всех данных узлов дерева в строке для правой границы поддерева без самого нижнего листа, как в части 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);
}
}