算法-二叉树展开单链表

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

然后至于是构造单链表,我们可以用一个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;
            }


        }
    }
}
相关推荐
Jerry4 小时前
LeetCode 101. 对称二叉树
算法
可编程芯片开发5 小时前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
AI科技星5 小时前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮5 小时前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
dream_home84075 小时前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
大鱼>6 小时前
多宠物家庭智能管理平台:云端架构与多设备协同实战
python·算法·iot·宠物
To_OC6 小时前
LC 22 括号生成:刷完这道题,我终于搞懂回溯剪枝了
javascript·算法·leetcode
To_OC7 小时前
LC 39 组合总和:回溯入门必刷题,我踩过的两个坑都在这了
javascript·算法·leetcode
数字杂技师7 小时前
每条推荐都很准,为什么我还是越刷越无聊?
算法
兰令水7 小时前
hot100【acm版】【2026.7.14打卡-java版本】
java·数据结构·算法·leetcode·面试