当我将节点添加到二叉树中并尝试显示有关它的信息时,信息未显示。我认为我在递归插入算法中有一些引用问题,但无法解决它。
package test;
class BinaryTree<T> {
private static class Node<T> {
int key;
T data;
Node<T> leftChild;
Node<T> rightChild;
public Node(int key,T data) {
this.key = key;
this.data = data;
}
}
public Node<T> rootNode;
public BinaryTree() {
rootNode = null;
}
public Node<T> getRootNode() {
return rootNode;
}
// insert node into binary tree
public void insertNode(int key,T data, Node<T> rootNode) {
// to create new node
// if tree doesn't have root elements
if(rootNode == null) {
rootNode = new Node<T>(key,data);
rootNode.leftChild = null;
rootNode.rightChild = null;
}
else {
Node<T> focusNode = rootNode;
if(key >= focusNode.key) {
insertNode(key,data,focusNode.rightChild);
}
else {
insertNode(key,data,focusNode.leftChild);
}
}
}
// inorder traverse tree
public void inOrderTraverseTree(Node<T> focusNode) {
if(focusNode != null) {
inOrderTraverseTree(focusNode.leftChild);
System.out.println(focusNode.data);
inOrderTraverseTree(focusNode.rightChild);
}
}
}
public class MyApp {
public static void main(String[] args) {
BinaryTree<String> bintree = new BinaryTree<String>();
bintree.insertNode(3, "Boss", bintree.rootNode);
bintree.inOrderTraverseTree(bintree.rootNode);
}
}
如果我使用此算法添加节点并尝试显示信息,则可以正常工作。如何解决递归算法的问题?
public void addNode(int key, T name) {
Node<T> newNode = new Node<T>(key,name);
if(rootNode == null) {
rootNode = newNode;
}
else {
Node<T> focusNode = rootNode;
Node<T> parent;
while(true) {
parent = focusNode;
if(key < focusNode.key) {
focusNode = focusNode.leftChild;
if(focusNode == null) {
parent.leftChild = newNode;
return;
}
}
else {
focusNode = focusNode.rightChild;
if(focusNode == null) {
parent.rightChild = newNode;
return;
}
}
}
}
}
感谢您的帮助。
答案 0 :(得分:3)
快速浏览一下代码 - 我发现你正在检查null的那一部分,rootNode变量函数的本地。因此,您创建的新节点在函数退出后立即被丢弃,它不会更改您的成员字段
// if tree doesn't have root elements
if(rootNode == null) {
rootNode = new Node<T>(key,data);
rootNode.leftChild = null;
rootNode.rightChild = null;
}
您需要使用this.rootNode = new Node<T>(key,data);
,或使用其他本地变量名称以避免混淆