114. 二叉树展开为链表
难度中等
给定一个二叉树,原地将它展开为一个单链表。
例如,给定二叉树
将其展开为:
思路1.0(已看题解):
如果当前节点有左子树,就把左子树拿出接在右子树位置处,原右子树再接在新生成的树最右叶节点的右子树处,如下图:
代码1.0(已完成):
class Solution {
public:
void flatten(TreeNode* root) {
while (root != NULL)
{
if (root->left == NULL)
root = root->right;
else
{
TreeNode* pre = root->left;
while (pre->right != NULL)
{
pre = pre->right;
}
pre->right = root->right;
root->right = root->left;
root->left = NULL;
root = root->right;
}
}
}
};
自己在碰到需要子树信息的时候总是想去把子树的根节点临时存储下来,这方法是不行的。