程序员代码面试指南 2.15:将搜索二叉树转换成双向链表

将搜索二叉树转换成双向链表

https://www.nowcoder.com/practice/2d3188a7e3ce4af2a9ebd5b89843fced

1、思路

  • 按照二叉树的中序遍历顺序,将每个节点放入队列q中;

  • q中依次弹出节点,并按照弹出的顺序重新连接所有节点即可。

2、代码

double_list_node * convert(BST * root)
{
    queue<BST*> q;
    inOrderTreeToQueue(root, q);

    root = q.front();
    q.pop();

    // head 为双链表头结点
    double_list_node *head = new double_list_node(), *pre = head;
    pre->val = root->val;
    pre->pre = nullptr;     //头结点往前为空

    while (!q.empty())
    {
        double_list_node *cur = new double_list_node();
        BST *tmp = q.front();
        q.pop();
        cur->val = tmp->val;

        pre->next = cur;    //连接前一节点和当前节点
        cur->pre = pre;

        pre = cur;          //指针后移
    }

    pre->next = nullptr;    //尾结点往后为空
    return head;
}

主要是为左程云的《程序员代码面试指南》这本书改写C++版的题解。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务