220429二叉树的最小深度-广度优先 - 图1

    1. public static void main(String[] args) {
    2. TreeNode treeNode7 = new TreeNode(7,null, null);
    3. TreeNode treeNode6 = new TreeNode(6, treeNode7, null);
    4. TreeNode treeNode5 = new TreeNode(5,null, treeNode6);
    5. TreeNode treeNode4 = new TreeNode(4,null, null);
    6. TreeNode treeNode3 = new TreeNode(3,null, null);
    7. TreeNode treeNode2 = new TreeNode(2, treeNode3, treeNode4);
    8. TreeNode treeNode1 = new TreeNode(1, treeNode2, treeNode5);
    9. System.out.println(scope(treeNode1));
    10. }
    11. private static int scope(TreeNode treeNode) {
    12. if (null == treeNode) return 0;
    13. // 定义一个先进先出的队列
    14. Queue<TreeNode> queue = new LinkedBlockingDeque<TreeNode>();
    15. // 根节点的深度设置为1
    16. treeNode.deep = 1;
    17. queue.offer(treeNode);
    18. while (null != queue) {
    19. treeNode = queue.poll();
    20. if (null == treeNode.left && null == treeNode.right) {
    21. // 返回最先遍历到的叶节点的深度
    22. return treeNode.deep;
    23. }
    24. // 节点的左子节点不为空
    25. if (null != treeNode.left) {
    26. // 左子节点的深度+1
    27. treeNode.left.deep = treeNode.deep + 1;
    28. // 将左子节点放入队列中
    29. queue.offer(treeNode.left);
    30. }
    31. // 节点的右子节点不为空
    32. if (null != treeNode.right) {
    33. // 右子节点的深度+1
    34. treeNode.right.deep = treeNode.deep + 1;
    35. // 将右子节点放入队列中
    36. queue.offer(treeNode.right);
    37. }
    38. }
    39. return 0;
    40. }