LeetCode-Flatten Binary Tree to Linked List-二叉树展开成链表-二叉树递归
https://oj.leetcode.com/problems/flatten-binary-tree-to-linked-list/
实现一个返回值为子树r展开后最右边节点的函数。然后使用这个函数适当的将展开后的右子树移到左子树的尾部,再将left指针置为0即可。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode *Solve(TreeNode *rt){ if (!rt->left && !rt->right) return rt; TreeNode *el=NULL; TreeNode *er=NULL; if (rt->left) el=Solve(rt->left); if (rt->right) er=Solve(rt->right); if (rt->left) { el->right=rt->right; rt->right=rt->left; rt->left=NULL; } if (er) return er; return el; } void flatten(TreeNode *root) { if (!root) return; Solve(root); } };