您的位置:首页 > 其它

[leetcode]Flatten Binary Tree to Linked List

2014-01-01 23:56 375 查看
简单题

/**
* 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* flat(TreeNode* root){
if(root == nullptr) return nullptr;
TreeNode *left = nullptr , *right = nullptr;
if(root -> left){
left = flat(root -> left);
}
if(root -> right){
right = flat(root -> right);
}
root -> left = nullptr;
if(left != nullptr){
root -> right = left;
}
if(right != nullptr){
if(left){
while(left -> right != nullptr){
left = left -> right;
}
left -> right = right;
}else{
root -> right = right;
}
}
return root;
}
void flatten(TreeNode *root) {
flat(root);
}
};


----update 2014-07-07---

class Solution {
public:
TreeNode* make(TreeNode* root) {
if (root == nullptr) return nullptr;
TreeNode* tRight = root->right;
TreeNode* ans = root;
root->right = make(root->left);
root->left = nullptr;
while(root->right) {
root = root->right;
}
root->right = make(tRight);
return ans;
}
void flatten(TreeNode *root) {
make(root);
}
};


重写了下,代码简洁点,不过记得就是要把left的指针指向null
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: