當(dāng)前位置:
首頁(yè) >
《剑指offer》求二叉树的最小深度(非递归法)
發(fā)布時(shí)間:2024/1/23
35
豆豆
生活随笔
收集整理的這篇文章主要介紹了
《剑指offer》求二叉树的最小深度(非递归法)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目:求二叉樹(shù)的最小深度(實(shí)際上該題來(lái)自leetcode)
解析:遞歸法簡(jiǎn)單些,下面演示下非遞歸。無(wú)外乎層次遍歷二叉樹(shù)了,思想是用current記錄當(dāng)前層的節(jié)點(diǎn)數(shù),next記錄下一層的節(jié)點(diǎn)數(shù),用隊(duì)列保存層次遍歷的節(jié)點(diǎn),每次出隊(duì)就current–,當(dāng)current=0時(shí)候就說(shuō)明該層遍歷完了,height++,然后把當(dāng)前的current=next,next=0;前方注意了,退出條件是什么呢?仔細(xì)想想,退出條件就是出隊(duì)節(jié)點(diǎn)的left以及right節(jié)點(diǎn)均為null,當(dāng)然更加需要注意的是,當(dāng)前層就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){//空節(jié)點(diǎn)return 0;}if(root.left==null&&root.right==null){//只有一個(gè)節(jié)點(diǎn)return 1;}int height =0;Queue<TreeNode> queue = new LinkedList<>();if(root!=null){queue.add(root);}int current=1;//隊(duì)列里只有一個(gè)節(jié)點(diǎn)int next=0;while (!queue.isEmpty()){TreeNode node =queue.poll();current--;//上一層的節(jié)點(diǎn)數(shù)減1if(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){//上一層節(jié)點(diǎn)遍歷完了height++;current=next; next=0;}}return height;} }總結(jié)
以上是生活随笔為你收集整理的《剑指offer》求二叉树的最小深度(非递归法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《剑指offer》数字在排序数组中出现的
- 下一篇: 《剑指offer》二叉树的深度