/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: //让左指针指向前面,右指针指向后面; //如果采用中序遍历,节点的处理是一个一个进行的,节点的插入位置是不同的,得取决于其父节点是其父父节点的左/右子树; //如果采用分治算法,对左子树、根节点、右子树进行连接即可,再返回开头节点 //采用的是中序遍历 TreeNode* Convert(TreeNode* pRootOfTree) { if(pRootOfTree == nullptr) return nullptr; return dp(pRootOfTree); } TreeNode* dp(TreeNode* node){ if(!node->left && !node->right){ return node; //单节点直接返回 } TreeNode* node_1; //不在if()中声明,可能出现未声明的情况,编译出错不允许 TreeNode *node_2; if(node->left){ node_1 = dp(node->left); //左子节点的第一个节点 TreeNode* curr= node_1; while(curr->right){ curr = curr->right; } curr->right = node; node->left = curr; } if(node->right){ node_2 = dp(node->right); //右子节点的第一个节点 node->right = node_2; node_2->left = node; } return node->left? node_1: node; } };