您的位置:首页 > 其它

[LeetCode] Flatten Binary Tree to Linked List

2015-01-17 21:08 417 查看
Given a binary tree, flatten it to a linked list in-place.

For example,
Given

1
/ \
2   5
/ \   \
3   4   6


The flattened tree should look like:

1
\
2
\
3
\
4
\
5
\
6

click to show hints.

Hints:
If you notice carefully in the flattened tree, each node's right child points to the next node of a pre-order traversal.

思路一:递归的思想。使用后序递归的方法。先将左右子树转换为链表,再将左右子树连接

    时间复杂度O(n),空间复杂度O(logN)

/**
* Definition for binary tree
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void flatten(TreeNode *root) {
if (root == nullptr) return;

flatten(root->left);
flatten(root->right);

//三方合并,将左子树形成的链表插入到root和root->right之间
TreeNode *p = root->right;
while (p->right) p = p->right;
p->right = root->right;
root->right = root->left;
root->left = nullptr;
}
};


思路二:迭代的方法。依据题目与前序遍历之间的关系。使用前序遍历的方法。

    

void flatten(TreeNode *root) {
if(root == NULL) return;
while(root){
if(root->left){
TreeNode *pre = root->left;
while(pre->right)
pre = pre->right;
pre->right = root->right;
root->right = root->left;
root->left = NULL;
}
root = root->right;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: