我正在尝试实现二叉树,但它只是没有取根。有任何想法吗?看起来根应该插入正常,但是当我打印它时我只是得到一个null。我是否尝试仅向树中添加不“粘”的临时节点?
public class tree {
public static void main(String args[]){
Treeb tree = new Treeb();
tree.add(10);
tree.add(20);
tree.add(2);
tree.add(6);
tree.printTree();
}
}
class Node{
int data;
Node left;
Node right;
public Node(int data){
this.data = data;
left = null;
right = null;
}
Node getLeft(){
return left;
}
Node getRight(){
return right;
}
}
class Treeb{
Node root;
Treeb(){
root = null;
}
void add(int n){
addNode(n, root);
}
void addNode(int n, Node vert){
if(vert == null){
vert = new Node(n);
}
else if(vert.left.data < n){
if(vert.left == null){
vert.left = new Node(n);
}
else{
addNode(n, vert.left);
}
}
else if(vert.right.data >= n){
if(vert.right == null){
vert.right = new Node(n);
}
else{
addNode(n,vert.right);
}
}
}
void printTree(){
if(root != null){
printChild(root);
}
System.out.println(root);
}
void printChild(Node leaf){
System.out.print(leaf.data);
if(leaf.left != null){
printChild(leaf.getLeft());
}
if(leaf.right != null){
printChild(leaf.getRight());
}
}
}
答案 0 :(得分:4)
您要为vert
分配一个新的引用,而不是root
,这就是它保持null
的原因。
答案 1 :(得分:3)
getLeft()
和getRight()
可以(并且会)在某个时间返回null
。您应该在printChild()
中确保leaf
本身不是null
。 (你if(leaf.left != null)
leaf
null
可能会在root
中获得 NPE ,你可能还想再次重新考虑你的树构造,null
在你的情况下是{{1}}。
答案 2 :(得分:3)
您的方法addNode(int, Node)
无效。
首先:
if(vert == null){
vert = new Node(n);
}
您正在将新节点分配给 local 变量。因此,新节点在方法结束时被丢弃。
第二
}
else if(vert.left.data < n){
// code
}
else if(vert.right.data >= n){
vert.left
和vert.right
可以是null
,因此当vert
不是null
时,您会获得NPE。