(微软100题)把二元查找树转变成排序的双向链表
2013-01-23 20:26
429 查看
问题描述:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。如:
10
6 12
4 8 14 16
转换成排序的双向链表为:4, 6, 8, 10, 12, 14, 16
思路:
中序遍历二元查找树即可得到排序的序列,将这个序列加入到双向链表中即可。可以直即使用二叉树中的节点作为链表的节点,左指针指向前一个节点, 右指针指向后一个节点。
代码示例:
// #include "stdafx.h" #include <time.h> #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _node_t{ _node_t *left; _node_t *right; int val; }node_t; // double linked list node_t *link_head = NULL; node_t *link_index = NULL; // tree node_t *root_node = NULL; int tree_add_node(node_t **pp_root, int val) { node_t *p = *pp_root; if (p == NULL){ p = (node_t *)malloc(sizeof(node_t)); *pp_root = p; p->val = val; p->left = NULL; p->right = NULL; return 0; } if (val < p->val){ tree_add_node(&p->left, val); } else{ tree_add_node(&p->right, val); } return 0; } void delete_tree(node_t *p_root) { if (p_root->left != NULL){ delete_tree(p_root->left); } else if (p_root->right != NULL){ delete_tree(p_root->right); } else{ free(p_root); p_root = NULL; return ; } } int link_add_node(node_t *p) { if (p == NULL){ return -1; } if (link_head == NULL){ link_head = p; link_index = link_head; } else{ p->left = link_index; link_index->right = p; link_index = p; } return 0; } int gen_link_list(node_t *p) { if (p == NULL){ return 0; } gen_link_list(p->left); link_add_node(p); gen_link_list(p->right); return 0; } void print_list(node_t *p) { while (p != NULL) { printf("%d->", p->val); p = p->right; } printf("\b\b \n"); } int main() { tree_add_node(&root_node, 10); tree_add_node(&root_node, 6); tree_add_node(&root_node, 4); tree_add_node(&root_node, 8); tree_add_node(&root_node, 14); tree_add_node(&root_node, 12); tree_add_node(&root_node, 16); gen_link_list(root_node); print_list(link_head); delete_tree(root_node); }
相关文章推荐
- 微软100题-第一题把二元查找树转变成排序的双向链表
- (微软100题)1.把二元查找树转变成排序的双向链表
- (微软100题)1.把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表——精选微软经典的算法面试100题中第一题
- 【微软100面试题实现】第01题:把二元查找树转变成排序的双向链表
- 微软面试(1/100)---把二元查找树转变成排序的双向链表
- 微软等数据结构+算法面试100题(43)-- 把二元查找树转变成排序的双向链表
- 微软100题(1) 二元查找树转变成排序的双向链表
- 程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表[数据结构
- 程序员面试100题---1.把二元查找树转变成排序的双向链表
- 100题_01 把二元查找树转变成排序的双向链表
- 面试100题:1 把二元查找树转变成排序的双向链表
- 算法面试100题——1、把二元查找树转变成排序的双向链表
- 程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表
- 程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表
- 程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表[数据结构]
- 微软等面试100题筛选答案-1-二元查找树转换成一个排序的双向链表
- 【转】100题题1解——把二元查找树转变成排序的双向链表
- 微软面试题系列(一):把二元查找树转变成排序的双向链表
- 面试100题:1.把二元查找树转变成排序的双向链表