日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【LeetCode笔记】958. 二叉树的完全性检验(Java、二叉树、BFS)

發布時間:2024/7/23 java 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【LeetCode笔记】958. 二叉树的完全性检验(Java、二叉树、BFS) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 題目描述
  • 思路 && 代碼
      • 層級遍歷法
      • BFS
      • 二刷

題目描述

  • 考察對完全二叉樹性質的理解

思路 && 代碼

層級遍歷法

  • 一開始試了自底向上的DFS,過了90%的用例,還是考慮得不夠全 = =
  • 層級遍歷:代碼比較多,但是總體效率和方法2差不多
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/ class Solution {Deque<TreeNode> queue = new ArrayDeque<>();public boolean isCompleteTree(TreeNode root) {queue.offer(root);return bfs(1, 1);}public boolean bfs(int nodeNums, int except) {if(queue.size() == 0) {return true;}int counts = 0;boolean flag = false;for(int i = 0; i < nodeNums; i++) {TreeNode tempNode = queue.pop();if(tempNode.left != null) {if(flag) {return false;}queue.offer(tempNode.left);counts++;}else {flag = true;}if(tempNode.right != null) {if(flag) {return false;}queue.offer(tempNode.right);counts++;}else {flag = true;}}if(nodeNums != except && !queue.isEmpty()) {return false;}return bfs(counts, 2 * except);} }

BFS

  • 注意:要使用能存儲 null 值的集合類(比如 ArrayDeque 就不行)
  • 核心思路:當前節點為空時,如果后面(包括右邊、下面)有節點則不是完全二叉樹。
class Solution {// 完全二叉樹判斷:當前節點為空時,后面(包括右邊、下面)不能有節點public boolean isCompleteTree(TreeNode root) {LinkedList<TreeNode> queue = new LinkedList<>();queue.offer(root);for(TreeNode cur = queue.poll(); cur != null; cur = queue.poll()) {queue.offer(cur.left);queue.offer(cur.right);}// 如果之后還有非空元素,說明不是完全二叉樹while(!queue.isEmpty()) {if(queue.poll() != null) {return false;}}return true;} }

二刷

class Solution {public boolean isCompleteTree(TreeNode root) {// jojo的奇妙做法。。不知道怎么想的,反正 A 了,問題不大!List<TreeNode> list = new LinkedList<>();Queue<TreeNode> queue = new ArrayDeque<>();queue.offer(root);list.add(root);while(!queue.isEmpty()) {TreeNode temp = queue.poll();list.add(temp.left);list.add(temp.right);if(temp.left != null) {queue.offer(temp.left);}if(temp.right != null) {queue.offer(temp.right);}}boolean flag = false;for(TreeNode temp : list) {if(temp == null) {flag = true;} else if (flag) {return false;}}return true;} }
  • 簡單寫法,八行代碼光速解決~
class Solution {public boolean isCompleteTree(TreeNode root) {LinkedList<TreeNode> queue = new LinkedList<>();for(TreeNode cur = root; cur != null; cur = queue.poll()) {queue.offer(cur.left);queue.offer(cur.right);}while(!queue.isEmpty()) {if(queue.poll() != null) {return false;}}return true;} }

總結

以上是生活随笔為你收集整理的【LeetCode笔记】958. 二叉树的完全性检验(Java、二叉树、BFS)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。