这道题本来我觉得思考的没啥问题,用层次遍历,队列里先进右,再进左,可是提交了不对,然后发现大家都交换了左右子节点,不太明白为什么这样做。
我的编译器输出没问题,就是不明白为啥要先交换子节点,请前辈指点一下迷津
代码如下:
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);
}
}
}
我看了3遍你的代码,我都没看到哪句是用来交换左右节点的。另外,这句话我不太明白:“想写个非递归,可是提交了不对,发现大家都交换了左右节点”。你说的“大家”是谁?
不好意思,我表述不清楚,我的意思是我写的层次遍历可以达到二叉树镜像的要求,不明白为什么很多人要交换左右节点再去遍历,不知道我哪里没想透。这道题是牛客网上的在线编程
@秦朝掷弹兵: 恕我没有理解,题目是要求根据一棵二叉树的到另一个棵二叉树,你的代码并没有产生一颗新树,也没有改变原树的结构。
有哪一行代码干了跟镜像有关的活吗,交换节点就是真正干活的
谢谢您回答!我这样输出的不就是镜像后的打印顺序吗?输入的是{8,6,10,5,7,9,11}
我用这个交换进队顺序的层次遍历输出的是{8,10,6,11,9,7,5},这样没有解决问题吗
@秦朝掷弹兵: 你觉得这解决了什么问题呢,你要解决的问题不是把提供给你的树变成它的镜像吗,也不是要你输出镜像后的树层次遍历得到的值啊
题目应该是让你得到一颗树,而不是让你按要求进行打印,下面是我以前写的一个递归