114. Flatten Binary Tree to Linked List
Description
Given a binary tree, flatten it to a linked list in-place.
For example,
Given
The flattened tree should look like:
Analysis
这道题的意思是将给定的二叉树扁平化为一个链接列表。
其实一开始拿到这道题我是有点懵的,因为不太懂它变化的规律,后来才明白其实就类似于前序遍历,将左子树插入到根与右子树之间。
明确题意后就可以开始解题了,我的做法是将根的左子树插入到根与右子树中,然后分别对左子树以及右子树进行类似操作。
注意要记录右子树,否则容易丢失右子树。
Code
/**
* 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:
TreeNode *node;
void preorder (TreeNode* root){
if(root!=NULL){
TreeNode *left = root->left;
TreeNode *right = root->right;
if(node == NULL){
node = root;
}
else{
if(node->right!=root){
node->right == root;
}
node->left = NULL;
node = root;
}
preorder(left);
preorder(right);
}
}
void flatten(TreeNode* root) {
node = NULL;
preorder(root);
}
};