2021/4/4,又是跟k神学习的一天,题意如下:
首先二叉搜索树顺序输出我们可以考虑中序遍历,但是这道题我们要构造双向链表,并且是把这个树转换成链表,那么我们可以根据中序遍历的思想把输出改成链接操作就可以了,并且因为是双向链表,所以我们要添加一个pre表示当前节点的前一个节点,然后链接就好了,具体实现看代码。
/*
// Definition for a Node.
class Node {
public:
int val;
Node* left;
Node* right;
Node() {}
Node(int _val) {
val = _val;
left = NULL;
right = NULL;
}
Node(int _val, Node* _left, Node* _right) {
val = _val;
left = _left;
right = _right;
}
};
*/
class Solution {
public:
Node* pre=nullptr;
Node* head=nullptr;
Node* treeToDoublyList(Node* root) {
if(root==nullptr)
return nullptr;
dfs(root);
pre->right=head;//头尾相连
head->left=pre;
return head;
}
void dfs(Node* now)
{
if(now==nullptr)
return ;
dfs(now->left);
if(pre!=nullptr)//找到头结点,pre为空就是头结点(最左的节点)
pre->right=now;
else
head=now;
now->left=pre;
pre=now;
dfs(now->right);
}
};
时间复杂度O(N),空间复杂度O(N)。
参考资料
·依旧是跟着K神刷题的一天