Flatten a binary tree to a fake "linked list" in pre-order traversal.
Here we use the right pointer in TreeNode as the next pointer in ListNode.
样例
1
\
1 2
/ \ \
2 5 => 3
/ \ \ \
3 4 6 4
\
5
\
6
注意
Don't forget to mark the left child of each node to null. Or you will get Time Limit Exceeded or Memory Limit Exceeded.
挑战
Do it in-place without any extra memory.
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution { //采用的是先序遍历
public:
TreeNode *last=nullptr; //记录当前节点的前一个节点(指遍历过程中的前后关系)
void flatten(TreeNode *root) {
if(!root)
return;
if(last!=nullptr){
last->right=root; //调整节点关系
last->left=nullptr;
}
last=root;
TreeNode *tmp=root->right; //防止丢失节点
flatten(root->left);
flatten(tmp);
}
};