原题地址https://leetcode.com/problems/flatten-binary-tree-to-linked-list/。
本题尝试用引用获得一个指针的指针。代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
typedef TreeNode ** PPTreeNode; //定义一种类型PPTreeNode,它是TreeNode结构的指针的指针,这样方便使用引用
TreeNode* func(TreeNode* root,PPTreeNode &nextNode)
{
TreeNode* ltree = root->left;
TreeNode* rtree = root->right;
if(ltree!=NULL)
{
root->left=NULL;
TreeNode** lnextNode=NULL;
root->right = func(ltree,lnextNode);
if(rtree!=NULL)
{
*lnextNode =func(rtree,nextNode);
}
else
{
nextNode = lnextNode;
}
}
else if(rtree!=NULL)
{
root->right = func(rtree,nextNode);
}
else
{
nextNode =&(root->right);
}
return root;
}
void flatten(TreeNode* root) {
TreeNode **nextNode=NULL;
if(root!=NULL)
{
root = func(root,nextNode);
}
}
};