Java二叉树实现中的对象链接异常
我实现了一个简单的二叉树程序,但是在遍历树时遇到了一个问题,只访问根元素。我怀疑这些节点没有链接。我尽了最大努力去解决这个问题,但没有发现我的代码有任何问题 在退出函数之前,我尝试了从插入函数打印数据,但没有正确打印数据Java二叉树实现中的对象链接异常,java,data-structures,binary-tree,Java,Data Structures,Binary Tree,我实现了一个简单的二叉树程序,但是在遍历树时遇到了一个问题,只访问根元素。我怀疑这些节点没有链接。我尽了最大努力去解决这个问题,但没有发现我的代码有任何问题 在退出函数之前,我尝试了从插入函数打印数据,但没有正确打印数据 public class BinaryTree { Node root; public void addNode(int data){ Node newNode = new Node(data); if(root == n
public class BinaryTree {
Node root;
public void addNode(int data){
Node newNode = new Node(data);
if(root == null){
root = newNode;
}
else{
Node currentNode = root;
while(true){
if(data <= currentNode.data){
currentNode = currentNode.leftChild;
if(currentNode == null){
currentNode = newNode;
return;
}
}
else{
currentNode = currentNode.rightChild;
if(currentNode == null){
currentNode = newNode;
return;
}
}
}
}
}
public void inorderTraversal(Node currentNode){
if(currentNode != null){
inorderTraversal(currentNode.leftChild);
System.out.print(currentNode.data + " ");
inorderTraversal(currentNode.rightChild);
}
}
}
公共类二进制树{
节根;
公共void addNode(int数据){
Node newNode=新节点(数据);
if(root==null){
根=新节点;
}
否则{
节点currentNode=root;
while(true){
如果(data您没有将元素分配给左
或右
子元素。您只是将其分配给未链接到树的局部变量currentNode
按照下面的代码放入while
循环中&它应该适合您
if(data <= currentNode.data){
if(currentNode.leftChild == null){
currentNode.leftChild = newNode;
return;
}
else {
currentNode = currentNode.leftChild;
}
}
else{
if(currentNode.rightChild == null){
currentNode.rightChild = newNode;
return;
}
else {
currentNode = currentNode.rightChild;
}
}
if(数据事实上,在递归步骤中,您没有正确地将新节点添加到树中。您应该使用的逻辑是,当您到达一个左或右指针为null
的节点,并且新节点属于该方向时,您应该将新节点添加到左或右。否则,继续遍历,直到您到达h这样的节点
while(true) {
if (data <= currentNode.data) {
if (currentNode.leftChild == null) {
currentNode.leftChild = newNode;
return;
}
else {
currentNode = currentNode.leftChild;
}
else {
if (currentNode.rightChild == null) {
currentNode.rightChild = newNode;
return;
}
else {
currentNode = currentNode.rightChild;
}
}
}
while(true){
如果(事实上,你从未将新节点添加到树中。你所做的只是将新节点分配给一个局部变量。你需要像leafNode.leftChild=newNode
。现在这只是我答案的副本。好的,我明白了。非常感谢。是的,我知道这段代码不会创建一个平衡的树,我计划学习并实现它。)在这之后,我再也不用漂白了。