怎樣推斷一棵二叉樹是全然二叉樹

weixin_30924079發表於2020-04-04

嚴蔚敏那本教材上的說法:一個深度為k,節點個數為 2^k - 1 的二叉樹為滿二叉樹。這個概念非常好理解,

就是一棵樹,深度為k,而且沒有空位。

首先對滿二叉樹依照廣度優先遍歷(從左到右)的順序進行編號。

一顆深度為k二叉樹,有n個節點,然後,也對這棵樹進行編號,假設全部的編號都和滿二叉樹相應,那麼這棵樹是全然二叉樹。

 

隨意的一個二叉樹,都能夠補成一個滿二叉樹。這樣中間就會有非常多空洞。在廣度優先遍歷的時候,假設是滿二叉樹,或者全然二叉樹,這些空洞是在廣度優先的遍歷的末尾,所以,但我們遍歷到空洞的時候,整個二叉樹就已經遍歷完畢了。而假設,是非全然二叉樹,

我們遍歷到空洞的時候,就會發現,空洞後面還有沒有遍歷到的值。這樣,僅僅要依據是否遍歷到空洞,整個樹的遍歷是否結束來推斷是否是全然的二叉樹。

演算法例如以下:

bool is_complete(tree *root) { queue q; tree *ptr; // 進行廣度優先遍歷(層次遍歷),並把NULL節點也放入佇列 q.push(root); while ((ptr = q.pop()) != NULL) { q.push(ptr->left); q.push(ptr->right); } // 推斷是否還有未被訪問到的節點 while (!q.is_empty()) { ptr = q.pop(); // 有未訪問到的的非NULL節點,則樹存在空洞,為非全然二叉樹 if (NULL != ptr) { return false; } } return true; }

轉載於:https://www.cnblogs.com/yxwkf/p/3877748.html

相關文章