二叉树展开为二叉树链表(右子节点)

原题在这里

  概述题意,给定一个二叉树,要求转换为右子节点连接起来的单链表。

analyse:

  没啥好说的,很普通的转换,写了递归和迭代两个版本。

code:

class Solution
{
    TreeNode *dfs(TreeNode *n)
    {
        if (!n)
            return nullptr;
        TreeNode *now = n; // now表示n所在树的先序遍历末节点
        if (n->left && n->right)
        {
            now = dfs(n->left);    //左子节点末端
            now->right = n->right; //末端连接
            now = dfs(n->right);   //末端转移
        }
        else if (n->left)
            now = dfs(n->left);
        else if (n->right)
            now = dfs(n->right);
        if (n->left)
            n->right = n->left; //当前节点构造
        n->left = nullptr;
        return now; //返回末端节点
    }

public:
    void flatten(TreeNode *root)
    {
        //dfs(root);
        TreeNode *now = root;
        while (now)
        {
            if (now->left)
            {
                auto next = now->left;
                auto pre = next;
                while (pre->right)
                    pre = pre->right;
                pre->right = now->right;
                now->left = nullptr;
                now->right = next;
            }
            now = now->right;
        }
    }
};

 

【Over】

posted @ 2022-06-02 11:13  Renhr  阅读(36)  评论(0)    收藏  举报