二叉搜索树转变为双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范围:输入二叉树的节点数 0≤𝑛≤10000≤n≤1000,二叉树中每个节点的值 0≤𝑣𝑎𝑙≤10000≤val≤1000
要求:空间复杂度𝑂(1)O(1)(即在原树上操作),时间复杂度 𝑂(𝑛)O(n)
链接:
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree) {
if (!pRootOfTree)return nullptr;
auto* ans = new TreeNode(0);
ans->right = pRootOfTree;
TreeNode* p_pre = ans;
TreeNode* p = ans->right;
TreeNode* pre = nullptr;
TreeNode* tmp = nullptr;
while (p) {
while (p->left) { //left exist, pre exist
pre = getPreNode(p);
if (pre->right == nullptr) {
pre->right = p;
p = p->left;
} else {
break;
}
}
p_pre->right = p;
p->left = p_pre;
p_pre = p;
p = p->right;
}
ans = ans->right;
ans->left = nullptr;
return ans;
}
private:
//if root has left child, it has preNode
TreeNode* getPreNode(TreeNode* root) {
TreeNode* pre = root->left;
//preNode is null, or it's->right child is root
while (pre->right != nullptr && pre->right != root) pre = pre->right;
return pre;
}
};
文档信息
- 本文作者:Chaojie Men
- 本文链接:https://menchaojie.github.io/2024/07/03/Binary_to_LinkList/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)