题目详情
给定一个二叉树,原地将它展开为一个单链表。
例如,给定二叉树
1
/ \
2 5
/ \ \
3 4 6
将其展开为:
1
\
2
\
3
\
4
\
5
\
6
——题目难度:中等
-前序遍历解法 - 递归实现
class Solution {
public:
void preorderTraversal(TreeNode* root, vector<TreeNode*>& save) {
if (root != NULL) {
save.push_back(root);
preorderTraversal(root->left, save);
preorderTraversal(root->right, save);
}
}
void flatten(TreeNode* root) {
vector<TreeNode*> save;
preorderTraversal(root, save);
for(int i = 1; i < save.size(); i++) {
TreeNode *pre = save[i - 1], *cur = save[i];
pre->left = NULL;
pre->right = cur;
}
}
};
-前序遍历解法 - 迭代实现
class Solution {
public:
void flatten(TreeNode* root) {
vector<TreeNode*> save;
stack<TreeNode*> st;
TreeNode* node = root;
while (node != NULL || !st.empty()) {
while (node != NULL) {
save.push_back(node);
st.push(node);
node = node->left;
}
node = st.top();
st.pop();
node = node->right;
}
for(int i = 1; i < save.size(); i++) {
TreeNode *pre = save[i - 1], *cur = save[i];
pre->left = NULL;
pre->right = cur;
}
}
};