958. 二叉樹的完全性檢驗

給定一個二叉樹,確定它是否是一個完全二叉樹

百度百科中對完全二叉樹的定義如下:

若設二叉樹的深度為 h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。(注:第 h 層可能包含 1~?2h?個節點。)

示例 1:

輸入:[1,2,3,4,5,6]
輸出:true
解釋:最后一層前的每一層都是滿的(即,結點值為 {1} 和 {2,3} 的兩層),且最后一層中的所有結點({4,5,6})都盡可能地向左。

示例 2:

輸入:[1,2,3,4,5,null,7]
輸出:false
解釋:值為 7 的結點沒有盡可能靠向左側。

提示:

  1. 樹中將會有 1 到 100 個結點。
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:bool isCompleteTree(TreeNode* root) {if(!root) return false;queue<TreeNode *> qu;qu.push(root);int flag = 1;while(!qu.empty()){TreeNode *s = qu.front();qu.pop();if(flag == 1){if(s->left && s->right){qu.push(s->left);qu.push(s->right);}else if(s->left && !s->right){qu.push(s->left);flag = 0;}else if(!s->left && !s->right){flag = 0;}else if(!s->left && s->right){return false;}}else{if(s->left || s->right)return false;}} return true;}
};

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385332.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385332.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385332.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

信號的產生

&#xff08;1&#xff09;終端按鍵產生信號&#xff08;與終端交互的進程&#xff09; Ctrl c → 2) SIGINT&#xff08;終止/中斷&#xff09; "INT" ----Interrupt Ctrl z → 20) SIGTSTP&#xff08;暫停/停止&#xff09; "T" ----Termin…

897. 遞增順序查找樹

給定一個樹&#xff0c;按中序遍歷重新排列樹&#xff0c;使樹中最左邊的結點現在是樹的根&#xff0c;并且每個結點沒有左子結點&#xff0c;只有一個右子結點。 示例 &#xff1a; 輸入&#xff1a;[5,3,6,2,4,null,8,1,null,null,null,7,9]5/ \3 6/ \ \2 4 8/ …

信號集操作函數

內核通過讀取未決信號集來判斷信號是否應被處理。信號屏蔽字mask可以影響未決信號集。而我們可以在應用程序中自定義set來改變mask。已達到屏蔽指定信號的目的。綜上&#xff1a;自定義信號集set&#xff08;也為一個字&#xff0c;64位&#xff09;通過信號集操作函數來改變信…

信號捕捉(signal、sigaction)

信號的基本屬性&#xff1a;軟中斷&#xff0c;由內核發送&#xff0c;內核處理。某個進程通過內核向另一個進程發送信號時&#xff08;引起信號產生的五個因素&#xff09;&#xff0c;另一個進程將會陷入內核進行中斷處理&#xff0c;未決信號集中相應信號置1&#xff0c;當遞…

1090 Highest Price in Supply Chain (25)(25 分)

A supply chain is a network of retailers&#xff08;零售商&#xff09;, distributors&#xff08;經銷商&#xff09;, and suppliers&#xff08;供應商&#xff09;-- everyone involved in moving a product from supplier to customer. Starting from one root suppli…

時序競態(競態條件)

產生原因&#xff1a;仍然以前文實現的sleep函數為例&#xff0c;如果進程在執行完alarm函數后&#xff0c;突然失去CPU&#xff0c;被阻塞等待&#xff08;這是有可能的&#xff0c;進程在執行過程中&#xff0c;若非原子操作&#xff0c;都有可能隨時失去CPU&#xff09;&…

1106 Lowest Price in Supply Chain (25)

A supply chain is a network of retailers&#xff08;零售商&#xff09;, distributors&#xff08;經銷商&#xff09;, and suppliers&#xff08;供應商&#xff09;-- everyone involved in moving a product from supplier to customer. Starting from one root suppli…

【Leetcode | 順序刷題 】二分查找目錄

二分查找序號題號129. 兩數相除 50. Pow(x, n) 69. x 的平方根

sigsuspend函數(mysleep函數的改進)

可以通過設置屏蔽SIGALRM的方法來控制程序執行邏輯&#xff0c;但無論如何設置&#xff0c;程序都有可能在“解除信號屏蔽”與“掛起等待信號”這個兩個操作間隙失去cpu資源。除非將這兩步驟合并成一個“原子操作”。sigsuspend函數具備這個功能。在對時序要求嚴格的場合下都應…

【Leetcode | 順序刷題】數學目錄

序號題號1 7. 整數反轉 28. 字符串轉換整數 (atoi)39. 回文數443. 字符串相乘

全局變量的異步I/O問題

全局變量的異步I/O問題同樣屬于時序競態問題&#xff0c;其本質就是多個進程或者同一個進程中的多個時序&#xff08;如主控程序和信號捕捉時的用戶處理函數&#xff09;對同一個變量進行修改時&#xff0c;它們的執行順序不一樣就會導致該變量最終的值不一樣&#xff0c;從而產…

【Leetcode | 03】String

字符串目錄序號題號33. 無重復字符的最長子串 151. 翻轉字符串里的單詞

可/不可重入函數

一個函數在被調用執行期間&#xff08;尚未調用結束&#xff09;&#xff0c;由于某種時序&#xff08;遞歸或者處理信號捕捉時等情況&#xff09;又被重復調用&#xff0c;稱之為“重入”。根據函數實現的方法可分為“可重入函數”和“不可重入函數”兩種。看如下程序。 可以看…

【Leetcode | 順序刷題】雜項目錄

序號題號類別1136. 只出現一次的數字位運算2137. 只出現一次的數字 II位運算3 260. 只出現一次的數字 III 位運算4191. 位1的個數位運算5231. 2的冪位運算6342. 4的冪位運算7 338. 比特位計數 位運算8405. 數字轉換為十六進制數位運算9371. 兩整數之和位運算10401. 二進制手表位…

SIGCHLD信號

&#xff08;1&#xff09;SIGCHLD信號產生的條件 1.子進程終止時會向父進程發送SIGCHLD信號&#xff0c;告知父進程回收自己&#xff0c;但該信號的默認處理動作為忽略&#xff0c;因此父進程仍然不會去回收子進程&#xff0c;需要捕捉處理實現子進程的回收&#xff1b; 2.子…

信號傳參

&#xff08;1&#xff09;發送信號傳參 前面已經知道從一個進程向另一個進程發送信號可以使用kill函數&#xff0c;但是kill函數在向進程發送信號的時候不能攜帶除了信號以外的其他信息&#xff0c;這時可以使用與kill相對應的sigqueue函數&#xff0c;該函數也是向一個進程發…

【Leetcode | 52】257. 二叉樹的所有路徑

給定一個二叉樹&#xff0c;返回所有從根節點到葉子節點的路徑。 說明: 葉子節點是指沒有子節點的節點。 示例: 輸入: 1 / \ 2 3 \ 5 輸出: ["1->2->5", "1->3"] 解釋: 所有根節點到葉子節點的路徑為: 1->2->5, 1->3 解法一&a…

623. 在二叉樹中增加一行

給定一個二叉樹&#xff0c;根節點為第1層&#xff0c;深度為 1。在其第 d 層追加一行值為 v 的節點。 添加規則&#xff1a;給定一個深度值 d &#xff08;正整數&#xff09;&#xff0c;針對深度為 d-1 層的每一非空節點 N&#xff0c;為 N 創建兩個值為 v 的左子樹和右子樹…

終端的概念

操作系統接口&#xff1a;用戶接口和程序接口。用戶接口分為聯機用戶接口和脫機用戶接口。脫機用戶接口出現在早期的批處理系統中&#xff08;將作業提前交給操作系統&#xff0c;作業完成的過程中用戶無法交互&#xff09;&#xff1b;聯機用戶接口即為終端&#xff08;所有輸…

終端的啟動流程

在Linux操作系統啟動時&#xff0c;首先加載的進程就是init進程&#xff08;ID為1&#xff09;&#xff0c;其余進程都是init進程產生的&#xff08;fork&#xff0c;然后exec金蟬脫殼&#xff09;&#xff0c;因此系統中所有進程都可以看成是init進程的子孫進程。可以通過ps a…