如何判斷完全二叉樹代碼 如何判斷二叉樹是否為完全二叉樹?
如何判斷二叉樹是否為完全二叉樹?1、首先明白什么是完全二叉樹,完全二叉樹是由滿二叉樹引出來的。一顆完全二叉樹的倒數(shù)第二層肯定是滿二叉樹,最后一層可以不是滿的,但是葉子節(jié)點都是靠左連續(xù)的。2、怎么判斷是
如何判斷二叉樹是否為完全二叉樹?
1、首先明白什么是完全二叉樹,完全二叉樹是由滿二叉樹引出來的。一顆完全二叉樹的倒數(shù)第二層肯定是滿二叉樹,最后一層可以不是滿的,但是葉子節(jié)點都是靠左連續(xù)的。
2、怎么判斷是否是完全二叉樹
我們采用層級遍歷來判斷是否是完全二叉樹,在遍歷的時候分兩種情況
如果有右孩子沒有左孩子,肯定不是完全二叉樹
如果有個節(jié)點不是不是左右孩子都全,那么后續(xù)的節(jié)點肯定是葉子節(jié)點,如果不是葉子節(jié)點那么肯定不是完全二叉樹
Java代碼為例
定義樹節(jié)點:
核心邏輯
驗證
判斷是否為完全二叉樹?
給你講講方法吧,實現(xiàn)就自己寫了。完全二叉樹(Complete Binary Tree): 若設(shè)二叉樹的高度為h,除第 h 層外,其它各層 (1~h-1) 的結(jié)點數(shù)都達(dá)到最大個數(shù),第 h 層所有的節(jié)點都連續(xù)集中在最左邊,這就是完全二叉樹。判斷很簡單,廣度優(yōu)先搜索整個二叉樹,一旦找一個不含有子節(jié)點或者只含有一個左子節(jié)點之后,那么后續(xù)的所有節(jié)點都必須是葉子節(jié)點。否則,該樹就不是完全二叉樹。實現(xiàn)的時候要用到隊列。
怎么判斷是否是完全二叉樹,用C 或C語言?
你可以上網(wǎng)先找一個用隊列實現(xiàn)二叉樹的廣度優(yōu)先搜索的代碼,然后在代碼中增加一個標(biāo)志變量tag,初始化為0。然后找到代碼中訪問結(jié)點的那句代碼,在那句代碼處增加if(tag==0)判斷該結(jié)點是否有兩個孩子,如果沒有兩個孩子,則將tag=1else判斷該結(jié)點是否為葉結(jié)點,如果不是葉結(jié)點,則不是完全二叉樹。
編寫程序判別給定二叉樹是否為完全二叉樹?
int JudgeComplete(BiTree bt) //判斷二叉樹是否是完全二叉樹,如是,返回1,否則,返回0
{int tag=0 BiTree p=bt, Q[] // Q是隊列,元素是二叉樹結(jié)點指針,容量足夠大
if(p==null) return (1)
QueueInit(Q) QueueIn(Q,p) //初始化隊列,根結(jié)點指針入隊
while (!QueueEmpty(Q))
{p=QueueOut(Q) //出隊
if (p->lchild && !tag) QueueIn(Q,p->lchild) //左子女入隊
else {if (p->lchild) return 0 //前邊已有結(jié)點為空,本結(jié)點不空
else tag=1 //首次出現(xiàn)結(jié)點為空
if (p->rchild && !tag) QueueIn(Q,p->rchild) //右子女入隊
else if (p->rchild) return 0 else tag=1
} //while
return 1 } //JudgeComplete