《剑指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; }}
阅读全文
0 0
- 《剑指offer》求二叉树的最小深度(非递归法)
- 剑指offer之求二叉树的深度(非递归的层次遍历)Java实现
- 非递归求二叉树的深度
- 剑指offer:二叉树的深度(递归&&非递归)(java)
- 二叉树的最小深度(非递归)
- 二叉树递归、非递归求深度
- 求二叉树的深度,递归与非递归算法
- 求二叉树的深度递归与非递归版
- 二叉树的遍历,递归和非递归,求深度
- 求二叉树深度的递归和非递归算法
- 求二叉树的深度 递归 非递归
- 剑指offer:求二叉树的深度
- 剑指offer:求二叉树的深度
- 剑指offer 求二叉树的深度
- 二叉树非递归求深度
- 二叉树的非递归遍历&求深度
- 求二叉树深度的非递归算法
- 二叉树的最小深度(递归)
- NKOJ3959 天真的因数分解(二分答案,容斥原理,莫比乌斯函数)
- 03. 左式堆(Leftist Heap)
- 暑假小集训
- linux启动分析——init进程与app启动
- 04. 斜堆(Skew Heap)
- 《剑指offer》求二叉树的最小深度(非递归法)
- Windows路由表配置:双网卡同时上公司内外网
- 斐波拉契数列矩阵连乘(模板)
- ViewGroup的TouchEvent的处理机制
- org.apache.commons.lang.builder.ReflectionToStringBuilder类,用于将对象转换成字符串
- implement strStr()
- 我要通过
- windows环境下ElasticSearch5以上版本安装head插件
- 01. 选择、插入、冒泡排序