114. 二叉树展开为链表*【力扣】

题意理解

如题

问题分析

递归

每次将左子树插入右子树下,再右下一步继续递归。

其他

链接

    void flatten(TreeNode* root) {
        if (!root) {    //空树,直接返回
            return;
        }    
        TreeNode *tmp = root -> right; //暂存右子树
        root -> right = root -> left;    //左子树转接到右子树
        root -> left = nullptr;    //左子树置空
        
        TreeNode *r = root;    
        while (r -> right) {    //找到当前右子树最右下角的节点
            r = r -> right;
        }
        r -> right = tmp;    //接上原来的右子树
        flatten(root -> right);    //继续右下一步拍平下一个右子树
    }

 

点赞