【剑指offer-解题系列(26)】二叉搜索树与双向链
2017-05-28 08:45
288 查看
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。分析
从根节点开始调整,把最左最右节点的值返回,使用引用作为传递
代码实现
TreeNode* Convert(TreeNode* root)
{
if(root==NULL)return NULL;
TreeNode* start;
TreeNode* end;
Convert( root, start, end);
return start;
}
void Convert(TreeNode* root, TreeNode* & start, TreeNode* & end)
{
if (root->left == NULL && root->right == NULL ) {
start=root;
end=root;
return;
}
TreeNode* start_left=NULL;
TreeNode* end_left=NULL;
if (root->left) {
Convert(root->left, start_left, end_left);
end_left->right = root;
root->left = end_left;
}
TreeNode* start_right=NULL;
TreeNode* end_right=NULL;
if (root->right) {
Convert(root->right, start_right, end_right);
start_right->left = root;
root->right = start_right;
}
if(start_left)
start = start_left;
else
start = root;
if(end_right)
end = end_right;
else
end = root;
}
相关文章推荐
- 【剑指offer-解题系列(63)】二叉搜索树的第k个结点
- 【剑指offer-解题系列(23)】二叉搜索树的后序遍历
- 【剑指offer-解题系列(12)】数值的整数次方
- 【剑指offer-解题系列(39)】二叉树的深度
- 【剑指offer-解题系列(49)】不用加减乘除做加法
- 剑指offer-26.二叉搜索树与双向链表
- 【剑指offer-解题系列(62)】序列化二叉树
- 【剑指offer-解题系列(5)】用两个栈实现队列
- 【剑指offer-解题系列(11)】矩形覆盖
- 【剑指offer-解题系列(13)】奇数位于数组的前列
- 【剑指offer-解题系列(44)】左旋转字符串
- 【剑指offer-解题系列(16)】合并两个排序的列表
- 【剑指offer-解题系列(45)】翻转单词顺序列
- 【剑指offer-解题系列(50)】把字符串转换成整数
- (C++)剑指offer-26:二叉搜索树与双向链表(分解让复杂问题简单)
- 【剑指offer-解题系列(1)】二维数组中的查找
- 【剑指offer-解题系列(15)】反转链表
- 【剑指offer】26二叉搜索树与双向链表
- 【剑指offer-解题系列(17)】树的子结构
- 【剑指offer-解题系列(33)】把数组排成最小的数