面试题 17.12. BiNode
二叉树的中序遍历是弱项,需要额外练习,特别是二叉搜索树的中序遍历,利用它是递增数列的性质;
通过一个pre来不断地修改节点指向,有左节点优先左节点,没有则右节点,pre指向的是当前节点在中序序列中的前一个节点;
TreeNode *pre = nullptr;
void biNode(TreeNode *cur)
{
if (!cur)
return;
biNode(cur->left);
if (pre == nullptr)
{
pre = cur;
}
else
{
pre->right = cur;
pre = cur;
cur->left = nullptr;
}
biNode(cur->right);
}
TreeNode *convertBiNode(TreeNode *root)
{
if (!root)
return root;
TreeNode *newRoot = root;
while (newRoot->left)
{
newRoot = newRoot->left;
}
biNode(root);
return newRoot;
}