Flatten Binary Tree to Linked List

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

给定一颗二叉树,将其扁平化处理,我们可以看到处理之后的节点顺序其实跟前序遍历原二叉树的一致,所以我们只需要前序遍历二叉树同时处理就可以了。代码如下:

class Solution {
public:
    void flatten(TreeNode *root) {
                if(!root) {
            return;
        }

        vector ns;
        TreeNode dummy(0);

        TreeNode* n = &dummy;

        ns.push_back(root);

        while(!ns.empty()) {
            TreeNode* p = ns.back();
            ns.pop_back();

            //挂载到右子树
            n->right = p;
            n = p;


            //右子树压栈
            if(p->right) {
                ns.push_back(p->right);
                p->right = NULL;
            }

            //左子树压栈
            if(p->left) {
                ns.push_back(p->left);
                p->left = NULL;
            }
        }
    }
};