TreeNode* flatten_helper(TreeNode* root) { cout << root->val << endl; if (root->left == NULL && root->right == NULL) return root; if (root->left == NULL) return flatten_helper(root->right); auto tmp = root->right; root->right = root->left; root->left = NULL; auto leftEndNode = flatten_helper(root->right); if (tmp != NULL) { leftEndNode->right = tmp; return flatten_helper(tmp); } return leftEndNode; }
static constexpr decltype(auto) apply(Xs&& xs) { using Raw = typename detail::std::remove_reference<Xs>::type; constexpr detail::std::size_t len = ::std::tuple_size<Raw>::value; return flatten_helper(detail::std::forward<Xs>(xs), detail::std::make_index_sequence<len>{}); }
void flatten(TreeNode* root) { if (root == NULL) return; flatten_helper(root); }