import dataStructure.tree.BinaryNode; //二叉树的二叉链表结点类
import dataStructure.tree.BinaryTree; //二叉树类
public class Traverse3 //构造并遍历二叉树
{ public static BinaryTree<String> create() //构造指定二叉树
{
BinaryNode<String> child_e, child_d, child_b, child_c, child_a;
child_e = new BinaryNode<String>("E", null, new BinaryNode("F"));
child_d = new BinaryNode<String>("D",new BinaryNode("G") , null);
child_c = new BinaryNode<String>("C", null, child_d);
child_b = new BinaryNode<String>("B", child_e, child_c);
child_a = new BinaryNode("A", child_b, null);
return new BinaryTree<String>(child_a);
} public static void main(String args[])
{
BinaryTree<String> bitree = create(); //创建了如上规则的一棵树
bitree.preOrder();
bitree.inOrder();
bitree.postOrder();
bitree.getRoot();
BinaryNode<String> a = bitree.getRoot();
System.out.println();
System.out.print("aaaaa"+a.left.data);
TurnTree turntree = new TurnTree();
turntree.TurnTree1(a);
}class NNode<E> //二叉树的二叉链表结点类
{
public E data; //数据元素
public NNode<E> child, brother; //分别指向左、右孩子结点 public NNode(E data, NNode<E> child, NNode<E> brother)
{ //构造结点,指定元素和左、右孩子结点
this.data = data;
this.child = child;
this.brother = brother;
} public NNode(E data) //构造有值的叶子结点
{
this(data, null, null);
} public NNode()
{
this(null, null, null);
} public boolean isLeaf() //判断是否叶子结点
{
return this.child==null && this.brother==null;
} public String toString()
{
return this.data.toString();
}
}}class BinaryTree1<E> //二叉树类
{
protected NNode<E> root; //根结点 public BinaryTree1() //构造空二叉树
{
root=null;
} public BinaryTree1(NNode<E> root) //构造指定根结点的二叉树
{
this.root=root;
} public boolean isEmpty() //判断是否空二叉树
{
return this.root==null;
} public NNode<E> getRoot() //返回二叉树的根结点
{
return this.root;
} public void preOrder() //先根次序遍历二叉树
{
System.out.print("\n先根序列: ");
preOrder(root);
} private void preOrder(NNode<E> p) //先根次序遍历以p结点为根的子二叉树
{
if (p!=null) //若二叉树不空
{
System.out.print(p.data+" "); //访问当前结点
preOrder(p.child); //按先根次序遍历当前结点的左子树
preOrder(p.brother); //按先根次序遍历当前结点的右子树
}
} public void inOrder() //中根次序遍历二叉树
{
System.out.print("\n中根序列: ");
inOrder(root);
} private void inOrder(NNode<E> p) //中根次序遍历以p结点为根的子二叉树
{
if (p!=null)
{
inOrder(p.child); //中根次序遍历左子树
System.out.print(p.data+" ");
inOrder(p.brother); //中根次序遍历右子树
}
} public void postOrder() //后根次序遍历二叉树
{
System.out.print("\n后根序列: ");
postOrder(root);
} private void postOrder(NNode<E> p) //后根次序遍历以p结点为根的子二叉树
{
if (p!=null)
{
postOrder(p.child);
postOrder(p.brother);
System.out.print(p.data+" ");
}
} public void insert(NNode<E> p, NNode<E> element, boolean childChild) //插入节点element作为p结点的孩子
{ //若leftChild为true,插入结点作为孩子节点,否则作为兄弟节点
if (p!=null)
{
NNode<E> q = new NNode<E>(element.data);
if (childChild)
{
q.child = p.child; //p结点的原左孩子成为q结点的左孩子
p.child = q; //q结点作为p结点的左孩子
}
else
{
q.brother = p.brother; //p结点的原右孩子成为q结点的右孩子
p.brother = q; //q结点作为p结点的右孩子
}
}
}
public void insert(NNode<E> p, NNode<E> element) //插入元素element作为p结点的左孩子
{
insert(p, element, true);
}}class TurnTree
{
Traverse2 traverse2 = new Traverse2();
BinaryTree<String> bitree = traverse2.create();
NNode<String> p = new NNode<String>("A"); //新的转化得来的树,根节点为p
BinaryTree1<String> bitree2 = new BinaryTree1<String>(p); public void TurnTree1()
{
System.out.print("\n 请输入二叉树根节点 ");
} public void TurnTree1(BinaryNode<String> m) //二叉树转换成树的过程,m是二叉树的根节点
{
BinaryNode<String> m1=new BinaryNode<String>(m.left.data);
/*这种异常发生在你使用了一个对象,但是这个对象是null,或者没有被创建。
这个异常是很常见的 而且问题也一目了然,是用了一个空指针
String str=null;str.equals( "str ");/////////这是典型例子
解决也很简单,根据报错的地方看哪个对象是空指针
一般造成的原因主要是,给一个类对象初始化为null,而之后又没有给它赋值*/
System.out.println();
System.out.print("aaaaabbbbbb===="+m1.data);
if(m1!=null)
{
NNode<String> b = new NNode<String>(m1.data);
bitree2.insert(p,b,true);
p=b;
TurnTree1(m1); //递归 }
BinaryNode<String> m2=new BinaryNode<String>(m.right.data);
if(m2!=null)
{
NNode<String> c = new NNode<String>(m2.data);
bitree2.insert(p,c,false);
p=c;
TurnTree1(m2);
}
bitree2.preOrder();
}
}Exception in thread "main" java.lang.NullPointerException
at TurnTree.TurnTree1(Traverse3.java:191)
at TurnTree.TurnTree1(Traverse3.java:205)
at Traverse3.main(Traverse3.java:39)
我用的netbeans,她说 BinaryNode<String> m1=new BinaryNode<String>(m.left.data);
TurnTree1(m1);
turntree.TurnTree1(a);
这三行出现了Exception in thread "main" java.lang.NullPointerException的错误。请问如何解决?谢谢。!
我百度过了, 一般造成的原因主要是,给一个类对象初始化为null,而之后又没有给它赋值。可是我测试过m1的值,用System.out试过了是有值的。真不知道啥回事了。。T T新手做了一个通宵
import dataStructure.tree.BinaryTree; //二叉树类
public class Traverse3 //构造并遍历二叉树
{ public static BinaryTree<String> create() //构造指定二叉树
{
BinaryNode<String> child_e, child_d, child_b, child_c, child_a;
child_e = new BinaryNode<String>("E", null, new BinaryNode("F"));
child_d = new BinaryNode<String>("D",new BinaryNode("G") , null);
child_c = new BinaryNode<String>("C", null, child_d);
child_b = new BinaryNode<String>("B", child_e, child_c);
child_a = new BinaryNode("A", child_b, null);
return new BinaryTree<String>(child_a);
} public static void main(String args[])
{
BinaryTree<String> bitree = create(); //创建了如上规则的一棵树
bitree.preOrder();
bitree.inOrder();
bitree.postOrder();
bitree.getRoot();
BinaryNode<String> a = bitree.getRoot();
System.out.println();
System.out.print("aaaaa"+a.left.data);
TurnTree turntree = new TurnTree();
turntree.TurnTree1(a);
}class NNode<E> //二叉树的二叉链表结点类
{
public E data; //数据元素
public NNode<E> child, brother; //分别指向左、右孩子结点 public NNode(E data, NNode<E> child, NNode<E> brother)
{ //构造结点,指定元素和左、右孩子结点
this.data = data;
this.child = child;
this.brother = brother;
} public NNode(E data) //构造有值的叶子结点
{
this(data, null, null);
} public NNode()
{
this(null, null, null);
} public boolean isLeaf() //判断是否叶子结点
{
return this.child==null && this.brother==null;
} public String toString()
{
return this.data.toString();
}
}}class BinaryTree1<E> //二叉树类
{
protected NNode<E> root; //根结点 public BinaryTree1() //构造空二叉树
{
root=null;
} public BinaryTree1(NNode<E> root) //构造指定根结点的二叉树
{
this.root=root;
} public boolean isEmpty() //判断是否空二叉树
{
return this.root==null;
} public NNode<E> getRoot() //返回二叉树的根结点
{
return this.root;
} public void preOrder() //先根次序遍历二叉树
{
System.out.print("\n先根序列: ");
preOrder(root);
} private void preOrder(NNode<E> p) //先根次序遍历以p结点为根的子二叉树
{
if (p!=null) //若二叉树不空
{
System.out.print(p.data+" "); //访问当前结点
preOrder(p.child); //按先根次序遍历当前结点的左子树
preOrder(p.brother); //按先根次序遍历当前结点的右子树
}
} public void inOrder() //中根次序遍历二叉树
{
System.out.print("\n中根序列: ");
inOrder(root);
} private void inOrder(NNode<E> p) //中根次序遍历以p结点为根的子二叉树
{
if (p!=null)
{
inOrder(p.child); //中根次序遍历左子树
System.out.print(p.data+" ");
inOrder(p.brother); //中根次序遍历右子树
}
} public void postOrder() //后根次序遍历二叉树
{
System.out.print("\n后根序列: ");
postOrder(root);
} private void postOrder(NNode<E> p) //后根次序遍历以p结点为根的子二叉树
{
if (p!=null)
{
postOrder(p.child);
postOrder(p.brother);
System.out.print(p.data+" ");
}
} public void insert(NNode<E> p, NNode<E> element, boolean childChild) //插入节点element作为p结点的孩子
{ //若leftChild为true,插入结点作为孩子节点,否则作为兄弟节点
if (p!=null)
{
NNode<E> q = new NNode<E>(element.data);
if (childChild)
{
q.child = p.child; //p结点的原左孩子成为q结点的左孩子
p.child = q; //q结点作为p结点的左孩子
}
else
{
q.brother = p.brother; //p结点的原右孩子成为q结点的右孩子
p.brother = q; //q结点作为p结点的右孩子
}
}
}
public void insert(NNode<E> p, NNode<E> element) //插入元素element作为p结点的左孩子
{
insert(p, element, true);
}}class TurnTree
{
Traverse2 traverse2 = new Traverse2();
BinaryTree<String> bitree = traverse2.create();
NNode<String> p = new NNode<String>("A"); //新的转化得来的树,根节点为p
BinaryTree1<String> bitree2 = new BinaryTree1<String>(p); public void TurnTree1()
{
System.out.print("\n 请输入二叉树根节点 ");
} public void TurnTree1(BinaryNode<String> m) //二叉树转换成树的过程,m是二叉树的根节点
{
BinaryNode<String> m1=new BinaryNode<String>(m.left.data);
/*这种异常发生在你使用了一个对象,但是这个对象是null,或者没有被创建。
这个异常是很常见的 而且问题也一目了然,是用了一个空指针
String str=null;str.equals( "str ");/////////这是典型例子
解决也很简单,根据报错的地方看哪个对象是空指针
一般造成的原因主要是,给一个类对象初始化为null,而之后又没有给它赋值*/
System.out.println();
System.out.print("aaaaabbbbbb===="+m1.data);
if(m1!=null)
{
NNode<String> b = new NNode<String>(m1.data);
bitree2.insert(p,b,true);
p=b;
TurnTree1(m1); //递归 }
BinaryNode<String> m2=new BinaryNode<String>(m.right.data);
if(m2!=null)
{
NNode<String> c = new NNode<String>(m2.data);
bitree2.insert(p,c,false);
p=c;
TurnTree1(m2);
}
bitree2.preOrder();
}
}Exception in thread "main" java.lang.NullPointerException
at TurnTree.TurnTree1(Traverse3.java:191)
at TurnTree.TurnTree1(Traverse3.java:205)
at Traverse3.main(Traverse3.java:39)
我用的netbeans,她说 BinaryNode<String> m1=new BinaryNode<String>(m.left.data);
TurnTree1(m1);
turntree.TurnTree1(a);
这三行出现了Exception in thread "main" java.lang.NullPointerException的错误。请问如何解决?谢谢。!
我百度过了, 一般造成的原因主要是,给一个类对象初始化为null,而之后又没有给它赋值。可是我测试过m1的值,用System.out试过了是有值的。真不知道啥回事了。。T T新手做了一个通宵
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货