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