《剑指offer》求二叉树的最小深度(非递归法)

来源:互联网 发布:linq 更新数据 编辑:程序博客网 时间:2024/09/21 06:33

题目:求二叉树的最小深度(实际上该题来自leetcode)

解析:递归法简单些,下面演示下非递归。无外乎层次遍历二叉树了,思想是用current记录当前层的节点数,next记录下一层的节点数,用队列保存层次遍历的节点,每次出队就current–,当current=0时候就说明该层遍历完了,height++,然后把当前的current=next,next=0;前方注意了,退出条件是什么呢?仔细想想,退出条件就是出队节点的left以及right节点均为null,当然更加需要注意的是,当前层就break了,需要height++

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */import java.util.LinkedList;import java.util.Map;import java.util.Queue;public class Solution {    public int run(TreeNode root) {        if(root==null){//空节点            return 0;        }       if(root.left==null&&root.right==null){//只有一个节点                return 1;        }        int height =0;        Queue<TreeNode> queue = new LinkedList<>();        if(root!=null){            queue.add(root);        }        int current=1;//队列里只有一个节点        int next=0;        while (!queue.isEmpty()){            TreeNode node =queue.poll();            current--;//上一层的节点数减1            if(node.left==null&&node.right==null){//退出条件                height++;                break;            }            if(node.left!=null){                queue.add(node.left);                next++;            }            if(node.right!=null){                queue.add(node.right);                next++;            }            if(current==0){//上一层节点遍历完了                height++;                current=next;                 next=0;            }        }        return height;    }}
原创粉丝点击