标签:back ack 变换 增加 二叉树的镜像 没有 == 判断 函数
题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。
二叉树的镜像定义:源二叉树 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来减少函数的调用是更好的选择。
标签:back ack 变换 增加 二叉树的镜像 没有 == 判断 函数
原文地址:https://www.cnblogs.com/shareidea94/p/11118964.html