LeetCode-114. 二叉树展开为链表
难度:中等
给你二叉树的根结点 root ,请你将它展开为一个单链表:
展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。
展开后的单链表应该与二叉树 先序遍历 顺序相同。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
// //1.前序递归方法
// void preorderTraversal(TreeNode* root , vector<TreeNode*> &v)
// {
// if(!root)return;
// v.push_back(root);
// preorderTraversal(root->left,v);
// preorderTraversal(root->right,v);
// }
// void flatten(TreeNode* root) {
// if(!root)return;
// vector<TreeNode*> v;
// preorderTraversal(root,v);
// for(int i=0;i<v.size()-1;i++){
// v[i]->left = NULL;
// v[i]->right = v[i+1];
// }
// }
//2.for循环,借助栈数据结构
void flatten(TreeNode* root) {
if(!root)return;
stack<TreeNode*> s;
s.push(root);
TreeNode *node = nullptr;
TreeNode *pre = nullptr;
while(!s.empty())
{
node = s.top();
s.pop();
if(node->right)
{
s.push(node->right);
}
if(node->left)
{
s.push(node->left);
}
if(pre)
{
pre->left = nullptr;
pre->right = node;
}
pre = node;
}
}
};
执行结果:
通过
执行用时:
8 ms, 在所有 C++ 提交中击败了50.65%的用户
内存消耗:
12.6 MB, 在所有 C++ 提交中击败了31.36%的用户
通过测试用例:
225 / 225