For example, given the following tree: 1 / \ 2 5 / \ \ 3 4 6 The flattened tree should look like: 1 \ 2 \ 3 \ 4 \ 5 \ 6
codecss
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(nullptr), right(nullptr){} }; class Solution { public: void flatten(TreeNode* root) { if(!root) return; /* 找到最左子节点,而后回到其父节点,把其父节点和右子节点断开,将原左子结点连上父节点的右子节点上 而后再把原右子节点连到新右子节点的右子节点上,而后再回到上一父节点作相同操做 */ flatten(root->left); flatten(root->right); TreeNode *tmp=root->right; root->right=root->left; root->left=nullptr; while(root->right) root=root->right; root->right=tmp; } };