【问题标题】:convert a binary search tree to a linkedlist in JAVA将二叉搜索树转换为 JAVA 中的链表
【发布时间】:2013-07-02 16:48:53
【问题描述】:
 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转换为双链表。

但是不知道为什么head总是变,应该是指向链表的head而不变。

我很高兴伟大的头脑能帮助我调试这段代码!谢谢!!!

【问题讨论】:

  • 你能把linklist()convertBST()的代码贴出来吗?其他代码似乎都没有对链表逻辑的 BST 做出贡献,所以它只会把所有东西都弄乱了。如果所有内容都整齐地缩进,也会有所帮助。

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


【解决方案1】:

为什么代码错误的基本关键是这一行:public static void convertBST(BiNode head, BiNode tail, BiNode root)方法中的head = root;tail = root;

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

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

【讨论】:

  • 我明白了。但是如何解决呢?我知道如何在 c/c++ 中解决这种问题,但是如何在 JAVA 中解决呢?再次感谢您
  • 要么返回值,要么传入值的可变包装器
猜你喜欢
  • 2017-03-30
  • 1970-01-01
  • 2012-07-15
  • 1970-01-01
  • 2011-04-14
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多