首页 新闻 赞助 找找看

请前辈看一下这一道二叉树的镜像的题目

-1
悬赏园豆:40 [待解决问题]


这道题本来我觉得思考的没啥问题,用层次遍历,队列里先进右,再进左,可是提交了不对,然后发现大家都交换了左右子节点,不太明白为什么这样做。
我的编译器输出没问题,就是不明白为啥要先交换子节点,请前辈指点一下迷津
代码如下:

public static void Mirror(TreeNode root) {
        if (root == null) {
            return;
        }
        Queue<TreeNode> queue=new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()){
            TreeNode tmp=queue.poll();
            System.out.println(tmp.val);

            if (tmp.right != null) {
                queue.offer(tmp.right);
            }
            if (tmp.left != null) {
                queue.offer(tmp.left);
            }
        }
    }  
秦朝掷弹兵的主页 秦朝掷弹兵 | 初学一级 | 园豆:81
提问于:2019-12-31 16:34
< >
分享
所有回答(3)
0

我看了3遍你的代码,我都没看到哪句是用来交换左右节点的。另外,这句话我不太明白:“想写个非递归,可是提交了不对,发现大家都交换了左右节点”。你说的“大家”是谁?

会长 | 园豆:12401 (专家六级) | 2019-12-31 16:38

不好意思,我表述不清楚,我的意思是我写的层次遍历可以达到二叉树镜像的要求,不明白为什么很多人要交换左右节点再去遍历,不知道我哪里没想透。这道题是牛客网上的在线编程

支持(0) 反对(0) 秦朝掷弹兵 | 园豆:81 (初学一级) | 2019-12-31 16:58

@秦朝掷弹兵: 恕我没有理解,题目是要求根据一棵二叉树的到另一个棵二叉树,你的代码并没有产生一颗新树,也没有改变原树的结构。

支持(1) 反对(0) 会长 | 园豆:12401 (专家六级) | 2019-12-31 17:12
0

有哪一行代码干了跟镜像有关的活吗,交换节点就是真正干活的

jakio6 | 园豆:1318 (小虾三级) | 2020-01-02 00:22

谢谢您回答!我这样输出的不就是镜像后的打印顺序吗?输入的是{8,6,10,5,7,9,11}
我用这个交换进队顺序的层次遍历输出的是{8,10,6,11,9,7,5},这样没有解决问题吗

支持(0) 反对(0) 秦朝掷弹兵 | 园豆:81 (初学一级) | 2020-01-02 16:07

@秦朝掷弹兵: 你觉得这解决了什么问题呢,你要解决的问题不是把提供给你的树变成它的镜像吗,也不是要你输出镜像后的树层次遍历得到的值啊

支持(0) 反对(0) jakio6 | 园豆:1318 (小虾三级) | 2020-01-02 16:38
0

题目应该是让你得到一颗树,而不是让你按要求进行打印,下面是我以前写的一个递归

南风知我意、 | 园豆:238 (菜鸟二级) | 2020-06-12 16:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册