【问题标题】:Convert a linked list structure to a binary tree structure with 2 modifications通过 2 处修改将链表结构转换为二叉树结构
【发布时间】:2013-09-01 04:35:18
【问题描述】:

提到可以对链表数据结构进行的 2 修改,以便将其转换为二叉树数据结构?

【问题讨论】:

  • 这里没有足够的上下文。什么样的修改?您是否仅限于可以在运行时完成的事情?或者您是否包括可以在源代码级别完成的结构修改?还是别的什么?
  • 不知道是什么修改。我认为这是一些简单的理论,但我无法理解。我不需要编程,但我需要用文字解释如何将链表数据结构更改为二叉树。这是一个过去的纸质问题。我不知道如何才能更好地解释。
  • 哪种LinkedList?单独,双重还是其他?

标签: data-structures linked-list binary-tree


【解决方案1】:

这个问题相当模糊,但我认为这可能意味着什么。

链表中使用的结构将有一个next 指针:

struct LinkedListNode {
    LinkedListNode *next;
    // data element(s)
};

二叉树中使用的结构将具有leftright 指针:

struct BinaryTreeNode {
    BinaryTreeNode *left;
    BinaryTreeNode *right;
    // data element(s)
}

所以,我猜这个问题所指的两个修改可能是:

  1. next 指针更改为left 指针
  2. 添加right指针

【讨论】:

    【解决方案2】:

    我没有得到“2修改”的意思, 但是要将LinkedList 转换为BinaryTree,我们可以采用两种方法

    1. 自下而上
    2. 自上而下

    1) 自上而下的方法:

    在这种方法中,我们可以将LinkedList分成两个子列表,中间元素将是父节点 左右子列表调用这个递归方法。

    这背后的基本逻辑可以是,

    ListToBinaryTree(LinkedList list, int start, int end) {
    
       mid -> start + (end - start) / 2;
       left -> ListToBinaryTree(list, start, mid-1);
       right -> ListToBinaryTree(list, mid+1, end);
    
    }
    

    2) 自下而上的方法:

    在这种方法中,我们将先创建子元素,然后再创建父元素。

    这背后的基本逻辑可以是,

    ListToBinaryTree(ListNode *& list, int start, int end) {
    
      mid -> start + (end - start) / 2;
      leftChild -> ListToBinaryTree(list, start, mid-1);
      parent -> new BinaryTree(list -> data);
      parent -> left = leftChild;
      list = list -> next;
      parent -> right = ListToBinaryTree(list, mid+1, end);
    
    }
    

    希望这会有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多