此题的意思是:对于一个根-左-右的基本树状结构,右子树保证只有一个或为空。要求变形后,以左子树为根,把原来的根和右节点作为新根节点的右、左节点。
解决此题的思路应该坚定不移地寻找递归方案。
经过分析,应该能够发现,对于一个root,left,right的基本结构,变形后的新结构应该变为:递归(root->left)作为根,root作为右,root->left作为左。于是代码就非常好写了。
注意到递归(root->left)返回的是它的根节点。怎么把root作为递归(root->left)的右子树呢?只要不停地从根节点往右子树方向移动就可以了。
基本代码思路
head=upsideDownBinaryTree(root->left);
node=head一路向右;
node->right=root;
node->left=root->right;
root->left=NULL; //root原本的左右子节点要清空
root->right=NULL;