IT公司100题-1-二叉树转换为双链表
2014-07-27 11:40
232 查看
问题描述:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树 节点的数据结构如下:
代码实现:
转载自源代码
本文链接地址: http://w.worthsee.com/index.php/1-%e6%8a%8a%e4%ba%8c%e5%85%83%e6%9f%a5%e6%89%be%e6%a0%91%e8%bd%ac%e5%8f%98%
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树 节点的数据结构如下:
struct BSTreeNode { int m_nValue; // value of node BSTreeNode *left; // left child of node BSTreeNode *right; // right child of node };
代码实现:
// 1.cc // 题目: // 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 // 要求不能创建任何新的结点,只调整指针的指向。 // 10 // / / // 6 14 // / / / / // 4 8 12 16 // 转换成双向链表 // 4=6=8=10=12=14=16 #include <iostream> using namespace std; typedef struct BSTreeNode { int value; BSTreeNode *left; BSTreeNode *right; } tree_node; // 创建二元查找树 void add_BSTree_node(tree_node* &p_current, int value) { if (NULL == p_current) { tree_node *node = new tree_node(); node->left = NULL; node->right = NULL; node->value = value; p_current = node; } else { if (p_current->value > value) add_BSTree_node(p_current->left, value); else if (p_current->value < value) add_BSTree_node(p_current->right, value); else cout << "The value has already in the tree."; } } // 二叉树转双向链表 void tree_to_list(tree_node* root, tree_node* &head, tree_node* &last) { //为空,返回 if (!root) return; //中续遍历子树,针对于每个节点设置节点的left和last->right,同时保存为last tree_to_list(root->left, head, last); root->left = last; if (last) last->right = root; else head = root; last = root; tree_to_list(root->right, head, last); } // 打印双向链表 void print_list(tree_node* head) { tree_node* p = head; while (p) { cout << p->value << " "; p = p->right; } cout << endl; } int main() { tree_node *root = NULL; add_BSTree_node(root, 10); add_BSTree_node(root, 6); add_BSTree_node(root, 14); add_BSTree_node(root, 4); add_BSTree_node(root, 8); add_BSTree_node(root, 12); add_BSTree_node(root, 16); tree_node* head = NULL; tree_node* last = NULL; tree_to_list(root, head, last); print_list(head); }
转载自源代码
本文链接地址: http://w.worthsee.com/index.php/1-%e6%8a%8a%e4%ba%8c%e5%85%83%e6%9f%a5%e6%89%be%e6%a0%91%e8%bd%ac%e5%8f%98%
相关文章推荐
- 面试100题系列之1将查找二叉树转换成有序的双向链表
- 链表节点面试100题系列之1将查找二叉树转换成有序的双向链表
- 数据结构 算法面试100题 之 二叉树转换成双向链表
- 数据结构 将搜索二叉树转换成双向链表
- 二叉树转换为链表
- leetcode 114.Flatten Binary Tree to Linked List (将二叉树转换链表) 解题思路和方法
- IT公司100题-13-求链表中倒数第k个结点
- 将二叉树按中序遍历转换成双向链表
- 二叉树转换成双向链表
- 【LeetCode91-100】编码种数,逆转单链表,IP地址转化,中序遍历二叉树,生成二叉搜索树,计算二叉树个数,交叉string【hard】,判断二叉搜索树是否合法,恢复二叉树(有两个元素被交换)
- 二叉树转换成双向链表
- 将二叉树的叶子结点转换成单链表,并返回最左叶子结点的地址(链头)
- 把搜索二叉树转换成双向链表
- 链表问题---将搜索二叉树转换成双向链表
- Flatten Binary Tree to Linked List 将二叉树转换为链表
- 二叉搜索树(搜索二叉树)转换成一个双向链表
- 把二叉树转换为双向链表
- 二叉树按中序遍历顺序转换成双向链表
- 二叉树转换为双向链表
- BST(搜索二叉树)与双向链表相互转换