我如何在java中进行二进制搜索树旋转?

时间:2014-04-30 18:00:01

标签: java recursion rotation binary-search-tree

所以我正在为一个项目编写代码,我要将一个节点向左旋转并向右旋转,我把它写出来但是当我运行它时会发生两件事情,我的左旋转方法正在旋转到右边而不是左边,我试过改变它周围的东西仍然向右旋转,因为我的旋转正确,当我尝试运行它时,我得到空指针异常。我只能在每个方法中使用一个return语句,并且必须以递归方式完成,这里有两种方法,我迫切需要帮助!!

   public void rotateLeft(int num) {
      root=rotateLeft(root,num);


    }
    private static IntNode rotateLeft(IntNode T,int num){

      //easiest case
      if(T==null)
      {
      }
        //rotation part       
      else if(num==T.getNum())
      {
         IntNode oldRight=T.getRight();
         if(T.getRight()!=null){
          T.setRight(oldRight.getLeft());
         oldRight.setLeft(T);
         T=oldRight;
         }
         else {
         }
      }
       else if(num>T.getNum())
      {
         T.setRight(rotateLeft(T.getRight(),num));
      }
      //recursion
      else
      {
         T.setLeft(rotateLeft(T.getLeft(),num));
}


      return  T;




         }
  // Rotate the node containing num to the right -- do nothing if not possible
    public void rotateRight(int num) {
      root=rotateRight(root,num);
    }
    private static IntNode rotateRight(IntNode T,int num)
    {
      IntNode oldLeft=T.getLeft();

      //easiest case
      if(T==null)
      {

      }
      //rotation part
        else if(num==T.getNum())
      {
         if(T.getLeft()!=null){
          T.setLeft(oldLeft.getLeft());
         oldLeft.setRight(T);
         T=oldLeft;
         }
         else {
         }
      }
       else if(num>T.getNum())
      {
         T.setLeft(rotateRight(T.getLeft(),num));
      }
      else
      {
         T.setRight(rotateRight(T.getRight(),num));
}






     return T;

    }

0 个答案:

没有答案