if 和 while 的使用区别

在使用栈来实现二叉树的中序遍历时,对于判断当前结点为空时使用 while 和 if 的结果不一样

//中序遍历 左根右

   public String inOrder(){
       ArrayList<E> list = new ArrayList<>();
       inOrder(root,list);
       return list.toString();
   }

   private void inOrder(Node root, ArrayList<E> list) {

       LinkedList<Node> stack = new LinkedList<>();
       Node mid = root;
   	//标记遍历结点不为null 或者 栈不为空
       while(mid != null || !stack.isEmpty()){
           //这里使用 if 的话只会出现左子树的左节点
           //用while 的话能如期显示
           while (mid != null){  //把mid的左序列结点,全部压栈
               stack.push(mid);
               mid = mid.left;
           }
           //出栈遍历
           Node pop = stack.pop();
           list.add(pop.value);
           //这里可以不用判断
           //直接写 mid = pop.right;
           if (pop.right != null){
               mid = pop.right;
           }
       }
   }

原因分析:

while和if一个是循环语句,一个是判断语句。

if 只做判断,判断一次之后,便不会再回来了
while 的话,循环,直到结果为false,才跳出来

链表的结构,要一直读下去,直到读完整个链表结构,所以需要while
if的话只读一次,便跳出了

if 和 while当条件不成立时,都跳过代码块执行后面的代码。
不同的是当条件成立时,if执行完代码块后继续执行后面的代码,while执行完代码块后判断while的条件,成立就再执行代码块里的代码,直到不成立,才执行代码块后面的代码。while的代码块里如果遇到break;指令,则跳出while代码块直接执行后面的代码。

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值