这题还算有点意思,有意思的地方就是虽说是按先序遍历的方式连接的,却不能按先序的方式遍历(这样的话递归时会改变树的结构,导致找不到后面的节点),于是按照先序相反的方式遍历(注意,这可不是后序遍历),程序是写出来了,问什么多提交了几次,我理解成的双向链表了,结果居然提示时间超时,看看别人的程序才知道自己错哪了。
void flattenRecursive(TreeNode *root,TreeNode *&next) {
if(root==NULL)
return ;
flattenRecursive(root->right,next);
flattenRecursive(root->left,next);
if(next)
{
next->left = NULL;//root 的话则转化成双向链表
}
root->right = next;
next = root;
}
void flatten(TreeNode *root) {
if(root==NULL)
return ;
TreeNode *next=NULL;
flattenRecursive(root,next);
next->left = NULL;
}