Given a binary tree, flatten it to a linked list in-place.
For example,
Given
1 / 2 5 / 3 4 6
The flattened tree should look like:
1 2 3 4 5 6
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: void flatten(TreeNode* root) { TreeNode *pre = nullptr; //记住前一结点 helper(root,pre); //前序遍历 } void helper(TreeNode *root, TreeNode *&pre) // 注意这里是一个指针的引用,pre是全局变量,不断变化 { if (root == nullptr) return; if (pre != nullptr) { pre -> left = nullptr; // 将前一结点的左指针置空 pre -> right = root; // 将前一结点的右指针指向当前的根节点 } pre = root; TreeNode *left = root -> left; TreeNode *right = root -> right; if (left != nullptr) // 对左子树进行遍历 helper(left,pre); if (right != nullptr) // 对右子树进行遍历 helper(right,pre); } };