题意理解
如题
问题分析
递归
每次将左子树插入右子树下,再右下一步继续递归。
其他
链接
void flatten(TreeNode* root) {
if (!root) { //空树,直接返回
return;
}
TreeNode *tmp = root -> right; //暂存右子树
root -> right = root -> left; //左子树转接到右子树
root -> left = nullptr; //左子树置空
TreeNode *r = root;
while (r -> right) { //找到当前右子树最右下角的节点
r = r -> right;
}
r -> right = tmp; //接上原来的右子树
flatten(root -> right); //继续右下一步拍平下一个右子树
}