算法-二叉树展开单链表

这道题我们可以利用栈来做,利用栈先进后出的特性 每次先加入右节点再加入左节点,这样的话弹出的时候正好左节点在前面,右节点在后面满足题目要求。

然后至于是构造单链表,我们可以用一个prev节点 prev的left永远都是null 而prev的right永远都等于cur

因为每次curr都是栈内弹出来的 按照左节点后进先出,所以prev的右节点每次其实都是原来二叉树的左节点,这样的话就能保证满足原二叉树的先序遍历。

代码如下:

java 复制代码
public class flatten {
    class  Solution{
        public void flatten(TreeNode root) {
         // 利用栈来解决 每次从栈内弹出一个节点作为当前访问的节点,获得该节点的子节点,如果子节点不为空,则以此右左节点压入栈内
            if(root == null) return;
            Deque<TreeNode> stack = new LinkedList<TreeNode>();
            stack.push(root);
            TreeNode prev = null;
            while(!stack.isEmpty()) {
                TreeNode curr=stack.pop();
                if(prev != null) {
                    prev.left=null;
                    prev.right=curr;
                }
                TreeNode left=curr.left;
                TreeNode right=curr.right;
                if(right != null) {
                    stack.push(right);
                }
                if(left != null) {
                    stack.push(left);
                }
                prev=curr;
            }


        }
    }
}
相关推荐
小蒋观天下5 小时前
端侧大模型在安防摄像头部署实操(下篇)|模型量化、推理加速、视频接入与量产调优
大数据·人工智能·算法·安全·机器学习·计算机视觉·ai大模型
sinat_286945195 小时前
大模型推理:部署方式与性能优化思路
人工智能·算法·缓存·chatgpt·性能优化
longlongzihan5 小时前
LeetCode 283. 移动零:从辅助数组到双指针原地算法
c++·算法·leetcode
在所不辞兄5 小时前
【零基础学智能仿真-42】二维随机有限元实战——把随机材料场赋给网格单元
人工智能·深度学习·算法·机器学习·工程仿真
罗湖老棍子9 小时前
Biorhythms(信息学奥赛一本通- P1639)
算法·数论·裴蜀定理·扩展欧几里得·扩展中国剩余定理
奋发向前wcx15 小时前
CSP-J复赛模拟赛4 王晨旭补题 2026.10.5
算法
念何架构之路17 小时前
zap采样器与性能优化内幕
算法·性能优化·哈希算法
晒太羊的猫18 小时前
hot100动态规划刷题
算法·动态规划
weixin_5310946918 小时前
heap_4内存管理
java·开发语言·算法
余额瞒着我当琳19 小时前
红黑树的实现--红黑树的概念、规则、效率、结构、旋转、查找、验证
数据结构·c++·算法