为了账号安全,请及时绑定邮箱和手机立即绑定

剑指offer:二叉树的镜像 为什么我的while循环成了死循环呢?

剑指offer:二叉树的镜像 为什么我的while循环成了死循环呢?

一棵林浦斯Ding 2016-07-22 20:23:25
书中的举例如下:我写的代码是:/** 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) {         while(root.left!=null||root.right!=null){             TreeNode rootLeft = root.left;             TreeNode rootRight = root.right;             root.left = rootRight;             root.right = rootLeft;             while(root.left!=null){              System.out.println(root.left.val);                 Mirror(root.left);             }             while(root.right!=null){              System.out.println(root.right.val);                 Mirror(root.right);             }         }     } }结果一直输出11 跳不出循环 请问是为什么呢?
查看完整描述

1 回答

已采纳
?
Caballarii

TA贡献1123条经验 获得超629个赞

 while(root.left!=null||root.right!=null){

这句话是死循环啊,因为判断条件永远为真啊

既然用了递归,就不需要再递归里面再循环了,把所有的while换成if就行了

查看完整回答
反对 回复 2016-07-22
  • 一棵林浦斯Ding
    一棵林浦斯Ding
    不啊 你看最下面的叶子 5、7、9、11 不都不符合这个条件吗?
  • Caballarii
    Caballarii
    执行根节点的时候你怎么跳出while循环?执行完这个循环root又没变,下一次还是true,就是死循环
  • 一棵林浦斯Ding
    一棵林浦斯Ding
    哎....但是脑袋抽了才用while 明明应该用if
  • 1 回答
  • 0 关注
  • 1264 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信