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; }