思路:递归,将左子树变成单链表形式,再将右子树变成单链表形式,最后将左子树单链表的末端连接到右子树单链表表头,将根节点的左孩子置空
void flatten(TreeNode* root) { if (root==nullptr) return; flatten(root->left); // 将左子树变成单链表形式 flatten(root->right); // 将右子树变成单链表形式 if (root->left) // 将左子树单链表的末端连接到右子树单链表表头 { TreeNode* p=root->left; while(p->right) p=p->right; p->right=root->right; root->right=root->left; root->left=nullptr; } }