Given a binary tree, flatten it to a linked list in-place.
For example, given the following tree:
1
/ \
2 5
/ \ \
3 4 6
The flattened tree should look like:
1
\
2
\
3
\
4
\
5
\
6
给一个二叉树,要求按前序遍历的顺序把二叉树变成一个链表。
step1:指针指向根节点,首先将根节点的左子树挂在根节点的右子树上,左子树前序遍历最后一个元素(即4)指向原右子树的根节点5,根节点左子树指向空。
1
\
2
/ \
3 4
\
5
\
6
step2:此时指针指向根节点的右子树根节点2,重复step1,也就是将2的左子树挂在2的右子树上,左子树最后一个元素连接2的原右子树根节点5,2的左指针指向空。
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) {
while(root!=NULL){
if(root->left!=NULL){
TreeNode* curr=root->left;
while(curr->right!=NULL)
curr=curr->right;
curr->right=root->right;
root->right=root->left;
root->left=NULL;
}
root=root->right;
}
}
};
耐心些,按照例子仔细划分一遍。