所以我试图实现BST(二进制搜索树)我已经制作了一个添加方法,将TreeNodes添加到树[TreeNode]数组
这是TreeNode类,我正在尝试设置父节点以及左节点和右节点,我使用调试器进行检查,但我不确定原因,但它没有设置Parent var,也只是在leftChild和rightChild字段中添加一个或另一个。
有问题的二传手就是这个
//set parent
public void setParent(TreeNode t)
{
this.parent = t.parent;
}
我无法理解当我从PAS43DEPQ类调用它时,它没有正确设置。
class TreeNode implements Comparable<TreeNode>
{
private Integer value;
private TreeNode leftChild;
private TreeNode rightChild;
private TreeNode parent;
//constructors
public TreeNode(){}
public TreeNode(Integer v){this.value = v;}
public TreeNode(TreeNode t){
this.value = t.value;
this.parent = t.parent;
this.leftChild = t.leftChild;
this.rightChild = t.rightChild;
}
public TreeNode (Comparable c){this.value = (int) c;}
//set parent
public void setParent(TreeNode t)
{
this.parent = t.parent;
}
//get parent
public TreeNode getParent()
{
return this.parent;
}
//get value
public int getValue(){return value;}
//set value
public void setValue(Integer i){ this.value = i;}
//get left node
public TreeNode getLeftChild(){return leftChild;}
//get right node
public TreeNode getRightChild(){return rightChild;}
//set left child
public void setLeftChild(TreeNode t) {this.leftChild = t;}
//set right child
public void setRightChild(TreeNode t) {this.rightChild = t;}
public TreeNode find(int n)
{
//this statement runs if the current node is == the value being searched.
if(this.value == n)
return this;
//this returns values left of the root then performs a recursive call if not found
if(value < this.value && leftChild != null)
return leftChild.find(n);
//this does the same as above except looks on the right side of the root
if(rightChild != null)
return rightChild.find(n);
//this returns if value is not found
return null;
}
@Override
public int compareTo(TreeNode o)
{
if (this.value == o.value)
{
return 0;// if value equal
}
if (this.value > o.value) //if value greater
{
return 1;
}
if (this.value < o.value)
{
return -1; //if value less
}
return 99;
}
}
以下是我添加的课程:
public class PAS43DEPQ implements DEPQ
{
private TreeNode[] tree = new TreeNode[100];
int index = 0;
@Override
public Comparable inspectLeast() {
return null;
}
@Override
public Comparable inspectMost() {
return null;
}
/*
right: (2 * n) + 2
left: (2 * n) + 1
parent: (1 - n) / 2
*/
public int right()
{
return (2 * index) + 2;
}
public int left()
{
return (2 * index) + 1;
}
public int parent()
{
return Math.round((index - 1) / 2);
}
@Override
public void add(Comparable c)
{
// Root node
if (tree[0] == null) {
tree[0] = new TreeNode(c);
return;
}
//this while loop is for tree traversal
while(tree[index] != null) {
if( c.compareTo(tree[index].getValue()) == 0) {
index += right() - index;
continue;
}
if( c.compareTo(tree[index].getValue()) > 0) {
index += right() - index;
continue;
}
if( c.compareTo(tree[index].getValue()) < 0) {
index += left() - index;
continue;
}
}
//this part is for place the new node
if(tree[index] == null) {
tree[index] = new TreeNode(c);
tree[index].setParent(tree[parent()]);
if( c.compareTo(tree[index].getValue()) == 0)
tree[parent()].setRightChild(tree[index]);
if( c.compareTo(tree[index].getValue()) > 0)
tree[parent()].setRightChild(tree[index]);
if( c.compareTo(tree[index].getValue()) < 0)
tree[parent()].setLeftChild(tree[index]);
index = 0;
}
return;
}
@Override
public Comparable getLeast() {
return null;
}
@Override
public Comparable getMost() {
return null;
}
@Override
public boolean isEmpty() {
return (tree[0] == null) ? true : false;
}
@Override
public int size() {
return tree.length;
}
}
我无法解决为什么父母没有被设置为该线
"tree[index].setParent(tree[parent()])"
正在被召唤?关于为什么会发生这种情况的任何想法?
答案 0 :(得分:1)
set方法应该是这样的
//set parent
public void setParent(TreeNode t)
{
this.parent = t;
}
此方法将TreeNode
作为this
引用的当前节点的父级。
您正在使用的语句将TreeNode t
的父项设置为当前节点的父项。