Java实现二叉树镜像 变换
2017-06-02 14:51
369 查看
题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述:
二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5
我开始想的是递归,但是不对:
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public void Mirror(TreeNode root) {
if(root.right==null||root.left==null){
return;
}
int temp=root.left.val;
root.left.val=root.right.val;
root.right.val=temp;
Mirror(root.left);
Mirror(root.right);
}
}
给我的错误提示是:
答案错误:您提交的程序没有通过所有的测试用例
case通过率为0.00%
测试用例:
{8,6,10,5,7,9,11}
对应输出应该为:
{8,10,6,11,9,7,5}
你的输出为:
{8,10,6,7,5,11,9}
我大概知道为什么会出这个错误了,因为虽然我交换了每个节点的value值,但是没有同时修改该节点的后继。
这个题应该是,交换每个root下面的left节点和right节点,而不是只是把数值交换了。
所以我的第二版代码:
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public void Mirror(TreeNode root) {
if(root.right==null||root.left==null){
return;
}
TreeNode temp=root.left;
root.left=root.right;
root.right=temp;
Mirror(root.left);
Mirror(root.right);
}
}给我提示的错误是:
答案错误:您提交的程序没有通过所有的测试用例
case通过率为20.00%
测试用例:
{8,7,#,6,#,5,#,4}
对应输出应该为:
{8,#,7,#,6,#,5,#,4}
你的输出为:
{8,7,#,6,#,5,#,4}
这里就变得有趣了。这是一个斜树,如果用if(root.right==null||root.left==null)会导致我的树根本无法交换,但是,如果用&& ,这里会报nullpoint的错误。
想一想,遇到了 null 的节点,节点本身是要交换的,但是应该给予判断,这个null节点不需要再递归Mirror了。
【还要考虑root为null的情况!!!】
AC代码: 33 ms, 692K
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public void Mirror(TreeNode root) {
if(root==null){return;}
if(root.right==null&&root.left==null){
return;
}
TreeNode temp=root.left;
root.left=root.right;
root.right=temp;
if(root.left!=null){
Mirror(root.left);}
if(root.right!=null){
Mirror(root.right);}
}
}
相关文章推荐
- java实现操作给定的二叉树,将其变换为源二叉树的镜像。
- 剑指Offer:面试题19——二叉树的镜像(java实现)
- 二叉树的镜像(Java实现)
- 数据结构与算法分析笔记与总结(java实现)--二叉树12:二叉树的镜像
- 镜像二叉树并层序打印 Java实现
- 二叉树的镜像java实现
- java 操作给定的二叉树,将其变换为源二叉树的镜像。
- 笔试面试算法经典--二叉树的镜像-递归与非递归实现(Java)
- 用java语言,操作给定的二叉树,将其变换为源二叉树的镜像(递归和循环两种方法)
- 【剑指offer——JAVA实现】二叉树的镜像
- 剑指Offer 面试题27:二叉树的镜像 Java代码实现
- java 操作给定的二叉树,将其变换为源二叉树的镜像。
- 剑指offer---二叉树的镜像---java实现
- 剑指offer--面试题19:二叉树的镜像--Java实现
- 二叉树Java实现
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归)
- java实现B树(二叉树)插入,删除
- 二叉树-链式存储-Java实现(未完待续)
- java 语言实现二叉树的各种操作
- Java二叉树的实现