我的思路:
前序遍历保证链表的有序性,并且在这个遍历的同时调整指针的指向
class Solution {
public:
Node* treeToDoublyList(Node* root) {
if(root == nullptr) return nullptr;
//如果是空的直接返回
dfs(root);
head->left = pre;
pre->right = head;
return head;
}
private:
Node *pre, *head;
//建立的时候不需要初始化为空节点吗?
void dfs(Node* cur) {
if(cur == nullptr) return;
dfs(cur->left);
if(pre != nullptr) pre->right = cur;
//前一个的右节点指向后一个
else head = cur;//返回的第一个左节点
cur->left = pre;//左节点要指向前一个,
pre = cur;
dfs(cur->right);
}
};
作者:jyd
链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/solution/mian-shi-ti-36-er-cha-sou-suo-shu-yu-shuang-xian-5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。