【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java
【LeetCode】Minimum Depth of Binary Tree
Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
递归和非递归,此提比较简单。广度优先遍历即可。关键之处就在于如何保持访问深度。
下面是4种代码:
1 import java.util.ArrayList; 2 import java.util.LinkedList; 3 import java.util.List; 4 import java.util.Queue; 5 6 class TreeNode { 7 int val; 8 TreeNode left; 9 TreeNode right; 10 11 TreeNode(int x) { 12 val = x; 13 } 14 } 15 public class MinimumDepthofBinaryTree { 16 /** 17 * 递归深度遍历 18 * @param root 19 * @return 20 */ 21 public int minDepth1(TreeNode root) { 22 if(root==null) 23 return 0; 24 if(root.left==null&&root.right==null){ 25 return 1; 26 } 27 int left=minDepth1(root.left); 28 int right=minDepth1(root.right); 29 if(left==0){ 30 return right+1; 31 } 32 if(right==0){ 33 return left+1; 34 } 35 else{ 36 return Math.min(right, left)+1; 37 } 38 } 39 public int minDepth2(TreeNode root) { 40 if(root==null) 41 return 0; 42 int left=minDepth1(root.left); 43 int right=minDepth1(root.right); 44 45 if(left==0&&right==0){ 46 return 1; 47 } 48 if(left==0){ 49 right= Integer.MAX_VALUE; 50 } 51 if(right==0){ 52 left=Integer.MAX_VALUE; 53 } 54 55 return Math.min(right, left)+1; 56 57 } 58 59 /** 60 * 广度优先搜索。一旦发现叶子结点,返回遍历深度。 61 * @param root 62 * @return 63 */ 64 public int minDepth3(TreeNode root) { 65 if(root==null){ 66 return 0; 67 } 68 Queue<TreeNode>queue=new LinkedList<>(); 69 queue.add(root); 70 int count=queue.size();//用来保存访问当前层次剩余未访问的节点。 71 int depth=1;//用来保存二叉树的访问深度 72 while(!queue.isEmpty()){ 73 //广度遍历 74 TreeNode topNode=queue.poll(); 75 count--; 76 if(topNode.left!=null){ 77 queue.add(topNode.left); 78 } 79 if(topNode.right!=null){ 80 queue.add(topNode.right); 81 } 82 //发现叶子节点 83 if(topNode.left==null&&topNode.right==null){ 84 return depth; 85 } 86 //访问一层完毕 87 if(count==0){ 88 depth++; 89 count=queue.size(); 90 } 91 92 } 93 return 0; 94 } 95 /** 96 * 广度优先搜索。一旦发现叶子结点,返回遍历深度。 97 * @param root 98 * @return 99 */ 100 public int minDepth4(TreeNode root) { 101 if(root==null){ 102 return 0; 103 } 104 List<TreeNode>list=new ArrayList<>(); 105 int count=1; 106 list.add(root); 107 while(list.size()!=0){ 108 List<TreeNode>singleList=new ArrayList<>(); 109 for(TreeNode t:list){ 110 if(t.left!=null){ 111 singleList.add(t.left); 112 }if(t.right!=null){ 113 singleList.add(t.right); 114 } 115 if(t.left==null&&t.right==null){ 116 return count; 117 } 118 } 119 count++; 120 list=singleList; 121 } 122 return 0; 123 } 124 public static void main(String[] args) { 125 TreeNode rootNode1 = new TreeNode(1); 126 TreeNode rootNode2 = new TreeNode(2); 127 TreeNode rootNode3 = new TreeNode(3); 128 TreeNode rootNode4 = new TreeNode(4); 129 TreeNode rootNode5 = new TreeNode(5); 130 TreeNode rootNode6 = new TreeNode(6); 131 TreeNode rootNode7 = new TreeNode(7); 132 rootNode1.left = rootNode2; 133 rootNode1.right = rootNode3; 134 rootNode2.left = rootNode4; 135 rootNode2.right = rootNode5; 136 rootNode3.left = rootNode6; 137 rootNode3.right = rootNode7; 138 MinimumDepthofBinaryTree minimumDepthofBinaryTree=new MinimumDepthofBinaryTree(); 139 System.out.println(minimumDepthofBinaryTree.minDepth4(rootNode1)); 140 141 } 142 143 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。