【leetcode】FlattenBinaryTreetoLinkedList
3,732 views
0
Question :
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
Anwser 1 :
/** * 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) { // Start typing your C/C++ solution below // DO NOT write int main() function if (root == NULL) return; TreeNode* left = root->left; TreeNode* right = root->right; // the original right child if (left) { root->right = left; root->left = NULL; TreeNode* rightmost = left; while(rightmost->right) { rightmost = rightmost->right; } rightmost->right = right; // point to the original right child } flatten(root->right); } };
Anwser 2 :
/** * 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) { // Start typing your C/C++ solution below // DO NOT write int main() function if (root == NULL) return; if (root->left) flatten(root->left); if (root->right) flatten(root->right); if (NULL == root->left) return; TreeNode ** ptn = &(root->left->right); while (*ptn) { ptn = & ((*ptn)->right); } *ptn = root->right; root->right = root->left; // link right to left root->left = NULL; } };
Anwser 3 :
/** * 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) { // Start typing your C/C++ solution below // DO NOT write int main() function bool flag = true; stack<TreeNode *> t; TreeNode *pre = NULL; if(root) { t.push(root); } while(t.size()) { TreeNode *cur = t.top(); if(flag) { if(cur->left && cur->left != pre) { t.push(cur->left); } else { flag = false; } } else { if(cur->right && cur->right != pre) { t.push(cur->right); flag = true; } else { t.pop(); //at this time, the sub-tree of cur is flattened, so just flatten the cur TreeNode *left = cur->left; if(left) { TreeNode *lastLeft = left; while(lastLeft->right) { lastLeft = lastLeft->right; } lastLeft->right = cur->right; cur->right = left; cur->left = NULL; } } } pre = cur; } } };
参考推荐:
LeetCode Problem:Flatten Binary Tree to Linked List
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2013-05-02 00:00:19
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!