广度优先遍历的思想 就是先入队列在 出队列 这样就解决了 不能分层遍历的情况
package tree;
import java.util.LinkedList;
import java.util.Queue;
import tree.TreeDeep.TreeNode;
//广度优先遍历 从上到下遍历 要想逐层遍历 就要把节点放到队列去 先进先出 这样就能逐层便利了
public class TreeNode2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeNode treeNode7=new TreeNode(7,null,null);
TreeNode treeNode6=new TreeNode(6,treeNode7,null);
TreeNode treeNode5=new TreeNode(5,null,null);
TreeNode treeNode4=new TreeNode(4,null,null);
TreeNode treeNode3=new TreeNode(3,treeNode6,null);
TreeNode treeNode2=new TreeNode(2,treeNode5,treeNode4);
TreeNode treeNode1=new TreeNode(1,treeNode2,treeNode3);
System.out.println(minDeep(treeNode1));
}
public static int minDeep(TreeNode root){
if(root ==null){
return 0;
}
Queue<TreeNode> queue=new LinkedList<TreeNode>();
root.deep=1; //初值 节点为1 从上到下
queue.add(root); //入队
while(!queue.isEmpty()){
TreeNode node=queue.poll();
if(node.left ==null && node.right==null){
return node.deep;
}
if(node.left!=null){
node.left.deep=node.deep+1;
queue.add(node.left);
}
if(node.right!=null){
node.right.deep=node.deep+1;
queue.add(node.right);
}
}
return 0; //返回啥都行 不会走到这里来
}
static class TreeNode{
int val;
int deep;
TreeNode left;
TreeNode right;
public TreeNode(int val, TreeNode left, TreeNode right) {
super();
this.val = val;
this.left = left;
this.right = right;
}
}
}