Leetcode:给一颗二叉树,找这颗二叉树最小的深度。
生活随笔
收集整理的這篇文章主要介紹了
Leetcode:给一颗二叉树,找这颗二叉树最小的深度。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給一顆二叉樹,找這顆二叉樹最小的深度。最小深度是從根節點到最近的葉節點的最短路徑上的節點數。
思路://采用廣度優先搜索,或者層序遍歷,找到的第一個葉節點的深度即是最淺。
一定記得維護一個last指針,來指向每一行的最后一個元素!!
C++?版本
class Solution { public:typedef TreeNode* tree;int run(TreeNode *root) {if(!root) return 0;queue<tree> q;tree now,last;int level,size;last = now = root;level = 1;q.push(root);while(q.size()){now = q.front();q.pop();size = q.size();if(now->left) q.push(now->left);if(now->right) q.push(now->right);//如果走到了每一行的最右邊,則將last更新為當前最右節點,也即是last表示每行的行尾;//每次push新的節點之后,都要判斷一下當前隊列的元素數量是否更新;//如果沒有更新且當前隊列為空,則跳出循環;if(q.size()-size == 0) break;if(last == now){level++;if(q.size()) last = q.back();}}return level;} };Java版本
來個非遞歸的,思路是層序遍歷,找到第一個左右結點都為null的情況,就返回.
/*** 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.Queue; /*給定一個二叉樹,求其最小深度。最小深度是從根節點到最近的葉節點的最短路徑上的節點數。 */ public class Solution {public int run(TreeNode root) {if(root == null) return 0;if(root.left == null && root.right == null) return 1;int depth = 0;Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while(!queue.isEmpty()){int len = queue.size();depth++;for(int i = 0;i<len;i++){//poll()返回并刪除隊頭元素TreeNode cur = queue.poll();if(cur.left == null && cur.right == null) return depth;if(cur.left != null) queue.offer(cur.left);if(cur.right != null) queue.offer(cur.right);}}return 0;}}?
總結
以上是生活随笔為你收集整理的Leetcode:给一颗二叉树,找这颗二叉树最小的深度。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图:BFS/DFS java实现
- 下一篇: Queue:poll、offer、ele