二叉树展开为链表
描述
给定一个二叉树,原地将它展开为链表。
例如,给定二叉树
1
/
2 5
/ \
3 4 6
将其展开为:
1
2
3
4
5
6
思路和代码
- 如果root->left == NULL,那么root = root->right
- root->left != NULL,找到左子树的最右节点,root的右子树应该挂在这个最右节点的下面,root->right = root->left,root->left = NULL
class Solution {
public:
void flatten(TreeNode* root) {
while(root)
{
if(root->left == NULL)
root = root->right;
else
{
TreeNode* pre = root->left;
while(pre->right)
pre = pre->right;
pre->right = root->right;
root->right = root->left;
root->left = NULL;
root = root->right;
}
}
}
};