我二传手不设置

我二传手不设置

问题描述:

所以我想实现BST(二叉搜索树)我做了这增加了树节点到树[树节点]数组我二传手不设置

这里的add方法就是我想要的树节点类设置父节点以及左右节点,我使用调试器进行了检查,但我不确定为什么,但是它没有设置父变量,并且它只在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()])"

被称为?任何ide为什么发生这种情况?

+0

我会期望'this.parent = t;'而不是'this.parent = t.parent;'...... D'oh? –

set方法应该是这样的

//set parent 
public void setParent(TreeNode t) 
{ 
    this.parent = t; 
} 

这种方法将使TreeNode吨由this引用当前节点的父。

您正在使用的声明将TreeNode t的父项设置为当前节点的父项。