给定一个二叉树,原地将它展开为一个单链表。
例如,给定二叉树
1
/ \
2 5
/ \ \
3 4 6
将其展开为:
1
\
2
\
3
\
4
\
5
\
6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
递归
首先将左子树排列好,然后将右子树接到左子树最后面,然后再去排列原来的右子树。
代码
class Solution {
public:
void flatten(TreeNode* root) {
if(!root) return;
flatten(root->left);
TreeNode* left = root->left;
TreeNode* right = root->right;
if(left){
root->right = left;
while(left->right) left = left->right;
left->right = right;
root->left = NULL;
}
flatten(right);
}
};