.把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \4 8 12 16 转换成双向链表4=6=8=10=12=14=16。
void insertOrderToQueue(TN* head,std::queue<TN*>& queue){ if (!head) { return; } if (head -> l) { insertOrderToQueue(head -> l,queue); } queue.push(head); if (head -> r) { insertOrderToQueue(head -> r,queue); } } TN* search_binary_tree_convert_double_link(TN* head){ if (!head) { return NULL; } std::queue<TN*> queue; insertOrderToQueue(head, queue); if (queue.empty()) { return NULL; } TN* doubleListHead = queue.front(); queue.pop(); doubleListHead -> l = NULL; doubleListHead -> r = NULL; TN* p = doubleListHead; while (!queue.empty()) { TN* node = queue.front(); queue.pop(); p -> r = node; node -> l = p; p = node; } p -> r = NULL; return doubleListHead; /** TN* root = NULL; int vec[] = {10,8,12,7,9,11,13}; create_TN_tree(root, vec, sizeof(vec) / sizeof(int), 0); TN* head = search_binary_tree_convert_double_link(root); while (head) { NSLog(@"%d ",head -> val); head = head -> r; } */ }