判別二叉樹T是否為完全二叉樹

2021-07-02 22:40:09 字數 1332 閱讀 3531

/*判別二叉樹t是否為完全二叉樹*/

定義:深度為k且含有n個結點的二叉樹,如果其每個結點都與深度為k的滿二叉樹中的編號從1到n的結點一一對應,則成為完全二叉樹。

判斷條件:

1. 左、右子樹都是完全二叉樹

2. 左子樹的高度和右子樹一樣或大1

3. 若左子樹比右子樹高度大1,則右子樹必須是滿的(節點數等於2^高度-1)

4. 若左子樹和右子樹高度一樣,左子樹必須是滿的

另外:具有n個結點的完全二叉樹的深度k滿足:2^(k-1)-1 < n <= 2^k-1 ;//式1

滿足式1的二叉樹,就滿足左右子樹的高度差不大於2,(要麼左子樹高1,要麼右子樹高1,要麼高度相等)

只要再判斷二叉樹的左子樹高度不小於右子樹

就可保證判斷條件1、2、3、4都滿足。

新的判斷條件:

1.具有n個結點的完全二叉樹的深度k滿足:2^(k-1)-1 < n <= 2^k-1 ;

2.所有左子樹高度不小於右子樹

解決:先求結點數,再求深度-->條件一;

遞迴判斷所有左右子樹是否滿足-->條件2。

**如下:

/**********

【題目】編寫演算法判別給定二叉樹是否為完全二叉樹。

二叉鍊錶型別定義:

typedef struct bitnode bitnode, *bitree;

typedef bitree qelemtype; // 設佇列元素為二叉樹的指標型別

status initqueue(queue &q);

status enqueue(queue &q, qelemtype e);

status dequeue(queue &q, qelemtype &e);

status gethead(queue q, qelemtype &e);

status queueempty(queue q);

**********/

//求二叉樹深度

int treedepth(bitree t)//計算二叉樹深度

//計算計算結點數

void calnode(bitree t,int &count)

if(t->rchild)

}//判斷二叉樹t的所有左子樹的深度是否都不小於對應的右子樹

status isldfar(bitree t)

return tag;

}status completebitree(bitree t)

/* 判別二叉樹t是否為完全二叉樹 */

參考:

二叉樹是否為完全二叉樹

單鏈表查詢倒數第k的結點 下圖判斷是否二叉樹 假設圖中三個二叉樹的黃顏色部分沒有,各樹的名稱就是圖上所標。首先由要求,需要層序遍歷,層序遍歷會使用到佇列。要判斷乙個二叉樹是否為完全二叉樹,首先需要找到臨界點,比如此二叉樹c結點。如果c結點沒有左右孩子,現在就要判斷,b的左右孩子d和e,只要d和e至少...

二叉樹 判斷二叉樹是否為完全二叉樹

問題描述 判斷一棵二叉樹是否為完全二叉樹。知識點 完全二叉樹是指除二叉樹的最後一層外,其他各層的節點數達到最大個數,且最後一層的葉節點從左到右連續存在,只缺右側若干節點。演算法實現 class node is complete binary tree public static boolean is...

判斷二叉樹是否為完全二叉樹

include include 節點 struct node 銷毀二叉樹 void destroy tree node root destroy tree root left destroy tree root right delete root 是否為完全二叉樹 bool is cbtree no...