例如 10
/ /
5 16 ===> 3<->5<->6<->10<->12<->16
/ / /
3 6 12
使用递归的方式
1: void build_dlist(node_t *node)
2: {
3: if (node->left) {
4: node_t * left = node->left;
5: while (left->right) { //移动到双向链表的最右端,因为此处是链表的最大值。
6: left = left->right;
7: }
8: left->right = node; //左子树链表最后节点指向父节点
9: node->left = left;
10: }
11:
12: if (node->right) {
13: node_t * right = node->right;
14: while (right->left) {
15: right = right->left;
16: }
17: right->left = node;
18: node->right = right;
19: }
20: }
21:
22: void tree_to_list(node_t *node)
23: {
24: if (!node) {
25: return;
26: }
27: tree_to_list(node->left);
28: tree_to_list(node->right);
29: build_dlist(node);
30: }