将二进制搜索树转换为JAVA中的链表

时间:2013-07-02 16:48:53

标签: java algorithm linked-list binary-search-tree

 public static BiNode linklist(BiNode root)
 {
    BiNode head = null, tail=null;
    convertBST(head, tail, root);
    return head;
 }



 public static void convertBST(BiNode head, BiNode tail, BiNode root)
 {
    BiNode leftTail = null, rightHead = null;
    if(root==null){
        head = null;
        tail = null;
        return;
    }
    System.out.println("root = "+root.key);
    convertBST(head, leftTail, root.node1);
    convertBST(rightHead, tail, root.node2);
    if(leftTail != null)
    {
        System.out.println("leftTail = "+leftTail.key);
        leftTail.node2 = root;
        root.node1 = leftTail;
    }else{
        head = root;
        System.out.println("head = "+ head.key+", root = "+root.key);
    }

       if(rightHead != null)
       {
        rightHead.node1 = root;
        root.node2 = rightHead;
       }else{
        tail = root;
        System.out.println("tail = "+ tail.key+", root = "+root.key);
       }
  }

以上是我的java代码,用于将BST转换为双链接列表。

但是我不知道为什么头总是会改变,这应该指向链接列表的头部并且不会改变。

我很高兴伟大的思想会帮助我调试这段代码!感谢!!!

1 个答案:

答案 0 :(得分:1)

代码错误原因的基本关键是方法head = root;

中的这一行:tail = root;public static void convertBST(BiNode head, BiNode tail, BiNode root)

您假设当您将参数设置为新节点时,它会在调用堆栈中向上传播(按引用调用)。 Java不会这样做。执行head = root;时,您只更改了head的本地值,而不是调用方法中的值。

因此,在方法public static BiNode linklist(BiNode root){中,head始终为null,方法将始终返回null