力扣226.翻转二叉树(java)

题目来源

226. 翻转二叉树 - 力扣(LeetCode)

代码(dfs)

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root == null) return root;

        Stack<TreeNode> stack = new Stack<>();
        stack.push(root);

        while(!stack.isEmpty()) {
            TreeNode node = stack.pop();

            if(node.right != null) stack.push(node.right);
            if(node.left != null) stack.push(node.left);

            swapNode(node);
        }
        return root;
    }
    //交换某结点左右子树
    private void swapNode(TreeNode node) {
        TreeNode tmp = node.left;
        node.left = node.right;
        node.right = tmp;
    }

}

代码分析

直接正常入栈就行,把栈顶结点直接交换左右子树就行。也就是,从根节点开始,交换左右子树,然后左节点,最后右结点。

相关推荐
235164 小时前
【MySQL】慢查寻的发现和解决优化(思维导图版)
java·后端·sql·mysql·职场和发展·数据库开发·数据库架构
IT古董5 小时前
【第五章:计算机视觉-项目实战之推荐/广告系统】2.粗排算法-(3)理解粗排模型之在线部分:在线架构及对双塔的应用
算法·1024程序员节
大数据张老师5 小时前
数据结构——平衡二叉树
数据结构·算法·查找
py有趣5 小时前
LeetCode算法学习之合并区间
学习·算法·leetcode
m0_748233645 小时前
单调栈详解【C/C++】
c语言·c++·算法·1024程序员节
郝学胜-神的一滴6 小时前
Linux中的`fork`函数详解:深入解析
linux·服务器·开发语言·c++·算法
大数据张老师7 小时前
数据结构——BF算法
数据结构·算法·1024程序员节
让我们一起加油好吗7 小时前
【数论】欧拉定理 && 扩展欧拉定理
c++·算法·数论·1024程序员节·欧拉定理·欧拉降幂·扩展欧拉定理
一匹电信狗7 小时前
【LeetCode_876_2.02】快慢指针在链表中的简单应用
c语言·数据结构·c++·算法·leetcode·链表·stl