/**
* 求二叉树的最小深度,深度优先
* 算法思想,空二叉树深度为0,当只有一个根节点是时,二叉树左子树和右子树都为空,深度为1
* 如果左子树存在,则寻找左子树最小深度
* 如果右子树存在,则寻找右子树的最小深度
* 遍历完一颗子树,最小深度+1,退出递归回到当前节点
* @param root
* @return
*/
static int minDepth(TreeNode root){
if(root ==null) return 0;
if(root.left == null && root.right == null) return 1;
int min = Integer.MAX_VALUE;
if(root.left!=null){
min = Math.min((minDepth(root.left)),min);
}
if(root.right!=null){
min = Math.min((minDepth(root.right)),min);
}
return min+1;
}
/**
* 求二叉树的最小深度,广度优先
* 算法思想,用队列把待查看的节点放入队列,如果左孩子存在就放入队列,左孩子深度=当前节点深度+1,如果右孩子存在就放入队列,右孩子深度=当前节点深度+1
* 当达到叶子节点时,叶子节点的深度就是整颗树的最小深度
* @param root
* @return
*/
static int minDepth1(TreeNode root){
if(root ==null) return 0;
Queue<TreeNode> queue = new LinkedList<>();
root.deep = 1;
queue.offer(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.offer(node.left);
}
if(node.right!=null){
node.right.deep = node.deep+1;
queue.offer(node.right);
}
}
return 0;
}
public static void main(String[] args) {
TreeNode node1 = new TreeNode();
TreeNode node2 = new TreeNode();
TreeNode node3 = new TreeNode();
TreeNode node4 = new TreeNode();
TreeNode node5 = new TreeNode();
TreeNode node6 = new TreeNode();
TreeNode node7 = new TreeNode();
node1.left = node2;
node2.left=node4;
node2.right=node5;
node1.right = node3;
node3.left = node6;
node6.left = node7;
System.out.println(minDepth1(node1));
}
java求二叉树的最小深度
最新推荐文章于 2024-10-21 18:08:16 发布
文章介绍了两种方法求解二叉树的最小深度:深度优先搜索(递归实现),通过比较左右子树的最小深度;广度优先搜索(使用队列),逐层遍历直到找到叶子节点。示例代码展示了如何在Java中应用这些算法。
872

被折叠的 条评论
为什么被折叠?



