18 二叉树的镜像
Posted shareidea94
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了18 二叉树的镜像相关的知识,希望对你有一定的参考价值。
题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。
二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5
1 /** 2 public class TreeNode 3 int val = 0; 4 TreeNode left = null; 5 TreeNode right = null; 6 public TreeNode(int val) 7 this.val = val; 8 9 10 */ 11 public class Solution 12 public void Mirror(TreeNode root) 13 //考虑特殊情况,根为空,或者只有一个根节点 14 if(root == null) 15 return;//如果是void的话,该怎么返回 16 if(root.left == null && root.right == null) 17 return; 18 TreeNode temp = null; 19 //采用了递归的方法 20 if(root!=null) 21 temp = root.left; 22 root.left = root.right; 23 root.right = temp; 24 Mirror(root.left); 25 Mirror(root.right); 26 27 28
if (root.left != null)
Mirror(root.left);
if (root.right != null)
Mirror(root.right);
最后两个if可以不需要
为啥不需要,加上判断程序不是更稳定么。
不加if逻辑上没问题。但是加上if判断会提升性能,因为不符合条件的不会调用函数,减少了不必要的函数调用,也就减少开销,提高了效率。可以测试下有if和没有if的各自运行时间。
加了if会增加判断条件的时间,但递归少了一层,不加if运行时间会减少,但多了一层递归,空间增加了
递归函数本身就需要时间来运行。可以把这个情况想得极端一点,假设这个函数里的操作都很耗时,那我们是多调用一次或者几次这个函数耗费的时间长,还是用if判断的时间长呢?很明显用if来减少函数的调用是更好的选择。
以上是关于18 二叉树的镜像的主要内容,如果未能解决你的问题,请参考以下文章