给你二叉树的根结点 root
,请你将它展开为一个单链表:
- 展开后的单链表应该同样使用
TreeNode
,其中right
子指针指向链表中下一个结点,而左子指针始终为null
。 - 展开后的单链表应该与二叉树 先序遍历 顺序相同。
思路一:递归
struct TreeNode* g_Last = NULL;
void realFlatten(struct TreeNode* root)
{
if (root == NULL) {
return ;
}
realFlatten(root->right);
realFlatten(root->left);
root->right = g_Last;
root->left = NULL;
g_Last = root;
}
void flatten(struct TreeNode* root){
if (root == NULL) {
return ;
}
g_Last = NULL;
realFlatten(root);
}
分析:
本题要将二叉树转换为链表,即可利用递归将二叉树遍历后用链表记录,最后返回根节点即可
总结:
本题考察二叉树的应用,利用递归转换根节点遍历完二叉树转换完即可