BiNode:将一棵二叉搜索树转换为单链表,规则为左子树构成的单链表->根节点->右子树构成的单链表。
无论是书上还是力扣上的描述,都不是很容易看懂的样子,这是我过了之后自己的理解。书上要求是双链表,而力扣上是单链表,如果按照双链表做就会出栈溢出。
另外书上虽然介绍了3种方法,但其实都是一种递归的思路,只是获取单链表尾结点的方法不同而已。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
pair<TreeNode*, TreeNode*> convert(TreeNode* root)
{
TreeNode *head = root, *tail = root;
if(root->left != nullptr){
pair<TreeNode*, TreeNode*> LeftList = convert(root->left);
LeftList.second->right = root;
root->left = nullptr;
head = LeftList.first;
}
if(root->right != nullptr){
pair<TreeNode*, TreeNode*> RightList = convert(root->right);
RightList.first->left = nullptr;
root->right = RightList.first;
tail = RightList.second;
}
return make_pair(head, tail);
}
public:
TreeNode* convertBiNode(TreeNode* root) {
if(root == nullptr) return nullptr;
else return convert(root).first;
}
};
本文介绍了一种将二叉搜索树转换为单链表的算法,遵循左子树链表->根节点->右子树链表的规则。讨论了力扣题目中单链表与书本上双链表的区别,以及递归实现的不同方法。
1006

被折叠的 条评论
为什么被折叠?



