1. 程式人生 > >資料結構面試題/判斷一棵樹是否是完全二叉樹

資料結構面試題/判斷一棵樹是否是完全二叉樹

二叉樹:
1.滿二叉樹:在一棵二叉樹中,如果所有分支節點都存在左子樹和右子樹,並且所有葉子節點都在同一層上。
2.完全二叉樹:如果一棵具有N個結點的二叉樹的結構與滿二叉樹的前N個結點的結構相同,稱為完全二叉樹。
這裡寫圖片描述

//判斷一棵二叉樹是否是完全二叉樹--利用層序遍歷來處理->關鍵:找第一個度不為2的結點->後序結點:如果有孩子則不是完全二叉樹,否則是
     bool IsCompleteBinaryTree()
    {
        if (NULL == _pRoot)  //
            return false;
        bool isOnlyLeft =
false; //標記僅有左節點的結點 queue<Node*> q; q.push(_pRoot); while (!q.empty()) { Node* pCur = q.front(); q.pop(); if (isOnlyLeft) { if (pCur->_pLeft || pCur->_pRight) return false
; } else { if (NULL == pCur->_pLeft && NULL != pCur->_pRight) //存在右孩子沒有左孩子,一定不為完全二叉樹 return false; else if (NULL != pCur->_pLeft && NULL == pCur->_pRight) //存在左孩子沒有右孩子可能不是,記錄標記結點看後續結點 { q.
push(pCur->_pLeft); isOnlyLeft = true; //只有左孩子是非滿結點 } else if (NULL != pCur->_pLeft && NULL != pCur->_pRight) // 左右孩子都存在,入佇列繼續迴圈判斷 { q.push(pCur->_pLeft); q.push(pCur->_pRight); } else isOnlyLeft = true; //左右孩子都存在,為非滿結點,看後續結點 } } return true; }

判斷一棵樹是否是完全二叉樹
這裡寫圖片描述
這裡寫圖片描述