判斷一棵樹是否是完全二叉樹

2021-08-04 11:32:27 字數 1204 閱讀 1813

(1)基礎知識

【二叉樹】:二叉樹是一棵特殊的樹,二叉樹每個節點最多有兩個孩子結點,分別稱為左孩子和右孩子。

【滿二叉樹】:高度為n的滿二叉樹有2^n- 1個節點的二叉樹。

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

【滿二叉樹是完全二叉樹的特例】

(2)判斷一棵樹是否是完全二叉樹的思路

1>如果樹為空,則直接返回錯

2>如果樹不為空:層序遍歷二叉樹

2.1>如果乙個結點左右孩子都不為空,則pop該節點,將其左右孩子入佇列;

2.1>如果遇到乙個結點,左孩子為空,右孩子不為空,則該樹一定不是完全二叉樹;

2.2>如果遇到乙個結點,左孩子不為空,右孩子為空;或者左右孩子都為空;則該節點之後的佇列中的結點都為葉子節點;該樹才是完全二叉樹,否則就不是完全二叉樹;

(3)**實現

#include

using

namespace

std;

#include

template

struct treenode

};----------

template

bool iscomplete(treenode* root)

//2.樹不為空

queue

*> q;

q.push(root);

while (!q.empty())

如果該節點左孩子為空,右孩子不為空,則一定不是完全二叉樹

if (top->left==null&&top->right)

如果該節點左孩子不為空,右孩子為空或者該節點為葉子節點,則該節點之後的所有結點都是葉子節點

if ((top->left&&top->right==null)||(top->left==null&&top->right==null))

else

}return

true;}}

return

true;

}----------

//滿二叉樹

void test1()

判斷一棵樹是否是完全二叉樹

一邊對二叉樹進行bfs將每乙個節點都加入到佇列,一邊執行下面的判斷 當前節點有右孩子,但沒有左孩子,直接返回false 當前節點有左孩子沒右孩子 或者 當前結點左孩子右孩子都沒有,那麼接下來遇到的所有節點必須是葉子節點 public static boolean check node head if...

二叉樹 判斷一棵樹是否是完全二叉樹

原創 2017年07月27日 19 16 05 如何判斷乙個樹是否為完全二叉樹?思路一 將所有的結點全部押入佇列中,空也壓入,每次判斷佇列的頭如果佇列頭為空了則跳出迴圈,如果此後佇列中還有元素則不是完全二叉樹。bool iscompletetree binarytreenode proot q.po...

判斷一棵樹是否是平衡二叉樹

題目 程式設計題 平衡二叉樹 時間限制 1000 ms,記憶體限制 256000 kb,長度限制 8000 b 判斷乙個二叉樹是不是平衡 說明 一棵二叉樹任意乙個節點的左右子樹的深度差不大於1,即為平衡二叉樹。給定乙個有n個節點的二叉樹,每個節點有乙個序號表示,樹有m條分支。每個分支用三個數字a b...