将二叉树拆成链表

来源:互联网 发布:three.js开发指南 编辑:程序博客网 时间:2024/05/20 13:09

一、问题描述

    将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。

 注意事项

不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。


样例

              1               \     1          2    / \          \   2   5    =>    3  / \   \          \ 3   4   6          4                     \                      5                       \                        6
二、解题思路

         定义一个向量存储下一个点的位置,用右指针连接起来,要注意左儿子为空,运用前序遍历此二叉树,返回此向量即可。

三、我的代码

class Solution {
public:
    /**
     * @param root: a TreeNode, the root of the binary tree
     * @return: nothing
     */
     vector<TreeNode*>v;
    void flatten(TreeNode*root) {
        if(root==NULL)  return;
        find(root);
        for(int i=0;i<v.size();i++)
        {
            v[i]->right=v[i+1];
            v[i]->left=NULL;
        }
        v[v.size()-1]->right=NULL;
        v[v.size()-1]->left=NULL;
    }
    void find(TreeNode*root)
    {
        if(root==NULL)  return;
        v.push_back(root);
        find(root->left);
        find(root->right);
    }
};

四、我的感想

       此题要注意定义一个向量存储下一个节点,然后用指针相连,此外要注意左儿子为空这一点。

0 0