1.把二元查找树转变成排序的双向链表
2013-09-18 12:31
381 查看
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树节点的数据结构如下:
HANDWRITING:
ANSWER FROM:http://blog.csdn.net/v_july_v/article/details/6870251
This is a traditional problem that can be solved using recursion.
For each node, connect the double linked lists created from left and right child node to form a full list.
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树节点的数据结构如下:
struct BSTreeNode { int m_nValue; // value of node BSTreeNode *m_pLeft; // left child of node BSTreeNode *m_pRight; // right child of node };
HANDWRITING:
BSTreeNode *list; BSTreeNode *tree; BSTreeNode *transform (BSTreeNode * & head, BSTreeNode * & tail, BSTreeNode *root) { if (root == 0) return 0; BSTreeNode *ltail, *rhead; transform(head, ltail, root->m_pLeft); transform(rhead, tail, root->mpRight); if (root == tree) list = head; if (ltail == 0) head = root; else ltail.m_pRight = root, root.m_pLeft = ltail; if (rhead == 0) tail = root; else root.m_pRight = rhead, rhead.m_pLeft = root; }
ANSWER FROM:http://blog.csdn.net/v_july_v/article/details/6870251
This is a traditional problem that can be solved using recursion.
For each node, connect the double linked lists created from left and right child node to form a full list.
/** * @param root The root node of the tree * @return The head node of the converted list. */ BSTreeNode * treeToLinkedList(BSTreeNode * root) { BSTreeNode * head, * tail; helper(head, tail, root); return head; } void helper(BSTreeNode *& head, BSTreeNode *& tail, BSTreeNode *root) { BSTreeNode *lt, *rh; if (root == NULL) { head = NULL, tail = NULL; return; } helper(head, lt, root->m_pLeft); helper(rh, tail, root->m_pRight); if (lt!=NULL) { lt->m_pRight = root; root->m_pLeft = lt; } else { head = root; } if (rh!=NULL) { root->m_pRight=rh; rh->m_pLeft = root; } else { tail = root; } }
相关文章推荐
- 把二元查找树转变成排序的双向链表
- 1.把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 天天算法03——二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表…
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表[数据结构]
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 转载 把二元查找树转变成排序的双向链表
- 每天一道算法题(8)——把二元查找树转变成排序的双向链表
- 微软面试(1/100)---把二元查找树转变成排序的双向链表
- 非中序遍历思路把二元查找树转变成排序的双向链表的分析
- 把二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表
- 微软面试题——把二元查找树转变成排序的双向链表
- 【面试题】把二元查找树转变成排序的双向链表
- 程序员面试题精选(1):把二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表