LeetCode做题总结 226. 翻转二叉树

226. 翻转二叉树

  • [代码1 报错](#代码1 报错)
  • [代码2 报错](#代码2 报错)
  • [代码3 正确。](#代码3 正确。)

代码1 报错

java 复制代码
class Solution {
    public TreeNode invertTree(TreeNode root) {
        // TreeNode _root = root; // 这是在保证
        // _root = preOrderTree(root);
        // return root;
        root = preOrderTree(root);
        return root;
    }

    public TreeNode preOrderTree(TreeNode root) {
        if(root == null) return root;
        swapNode(root.left, root.right);
        preOrderTree(root.left);
        preOrderTree(root.right);
        return root;
    }

    public void swapNode(TreeNode left, TreeNode right) {
        TreeNode tmp = left;
        left = right;
        right = tmp;
    }
}

是错的

代码2 报错

java 复制代码
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root == null) return root;
        swapNode(root.left, root.right);
        invertTree(root.left);
        invertTree(root.right);
        return root;
    }

    public void swapNode(TreeNode left, TreeNode right) {
        TreeNode tmp = left;
        left = right;
        right = tmp;
    }
}

还是错的

代码3 正确。

代码3和代码1、2的区别在swap函数上。
想不通

在各大平台问了一下,终于明白了。
分析: 在 Java 中,参数是按值传递的,而不是按引用传递的。我的swapNode函数,只交换了临时变量的值(引用),返回后,原本的树中结点值不变。
在这个修改后的版本中,swapNode 函数只接受一个参数 root,并直接在这个节点上交换左右子树的值。这样就能正确地实现二叉树翻转的功能。

java 复制代码
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root == null) return root;
        swapNode(root);
        invertTree(root.left);
        invertTree(root.right);
        return root;
    }

    public void swapNode(TreeNode root) {
        TreeNode tmp = root.left;
        root.left = root.right;
        root.right = tmp;
    }
}

这样是对的

相关推荐
铸人4 分钟前
再论自然数全加和-质数的规律
数学·算法·数论·复数
历程里程碑1 小时前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
YGGP2 小时前
【Golang】LeetCode 128. 最长连续序列
leetcode
你撅嘴真丑8 小时前
第九章-数字三角形
算法
uesowys8 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
ValhallaCoder9 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
董董灿是个攻城狮9 小时前
AI 视觉连载1:像素
算法
智驱力人工智能9 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
孞㐑¥10 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
月挽清风10 小时前
代码随想录第十五天
数据结构·算法·leetcode