/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return TreeNode类 */ TreeNode* flattenTree(TreeNode* root) { // write code here if (root == nullptr)return nullptr; TreeNode* l = flattenTree(root->left); TreeNode* r = flattenTree(root->right); if (l) { root->right = l; root->left = nullptr; while (l->right)l = l->right; l->right = r; } else { root->right = r; root->left = nullptr; } return root; } };
一、题目考察的知识点
递归+链表
二、题目解答方法的文字分析
递归将左子树展开成链表形式,同理右子树也展开成链表形式。
将左子树链表接在根节点的右子树上,将右子树链表接在左子树链表的末尾,这样就展开了。
先要判断一下左子树是否为空,如果为空就直接将右子树链表接在根节点右子树上
不为空就将左子树链表连接到根节点的右子树上。
三、本题解析所用的编程语言
c++