刷题114. Flatten Binary Tree to Linked List
一、题目说明
题目114. Flatten Binary Tree to Linked List,将一个二叉树“原地”压缩为“链表”形态的二叉树。难度为Medium!
二、我的解答
这个题目如果允许使用栈的话Easy,先序遍历二叉树,右子树入栈,左子树入栈。当栈不空的时候,将栈顶元素放到右子树即可。
class Solution{ public: void flatten(TreeNode* root){ //先根遍历 if(root==NULL) return; if(root->left==NULL && root->right==NULL) return; TreeNode *p,* cur = root; stack<TreeNode*> st; if(root->right !=NULL){ st.push(root->right); } if(root->left !=NULL){ st.push(root->left); } while(! st.empty()){ p = st.top(); st.pop(); cur->left = NULL; cur->right = p; cur = cur->right; if(cur->right !=NULL){ st.push(cur->right); } if(cur->left !=NULL){ st.push(cur->left); } } return; } };
性能:
Runtime: 12 ms, faster than 27.18% of C++ online submissions for Flatten Binary Tree to Linked List. Memory Usage: 11.6 MB, less than 8.33% of C++ online submissions for Flatten Binary Tree to Linked List.
三、优化措施
此处的“原地”,理解起来不能使用栈的。在这种情况下,将右子树作为左子树的最右下节点的右子树,左子树变为右子树即可。
class Solution{ public: void flatten(TreeNode* root){ if(root==NULL) return; if(root->left !=NULL){ TreeNode* pre = root->left; while(pre->right !=NULL){ pre = pre->right; } pre->right = root->right; root->right = root->left; root->left = NULL; } flatten(root->right); return; } };
性能如下:
Runtime: 4 ms, faster than 95.35% of C++ online submissions for Flatten Binary Tree to Linked List. Memory Usage: 11.3 MB, less than 8.33% of C++ online submissions for Flatten Binary Tree to Linked List.
这个性能还一般,用morris方法(线索化二叉树),空间复杂度可以到O(1)。
所有文章,坚持原创。如有转载,敬请标注出处。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 本地部署 DeepSeek:小白也能轻松搞定!
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 普通人也能轻松掌握的20个DeepSeek高频提示词(2025版)