設計乙個演算法,判斷乙個二叉樹是否為完全二叉樹

2021-07-03 16:24:27 字數 879 閱讀 9246

思想:根據完全二叉樹的定義,對完全二叉樹按照從上到下、從左到右的層次遍歷,應該滿足一下兩條要求:

某節點沒有左孩子,則一定無右孩子

若某節點缺左或右孩子,則其所有後繼一定無孩子

若不滿足上述任何一條,均不為完全二叉樹。

演算法思路:採用層序遍歷演算法,用cm變數值表示迄今為止二叉樹為完全二叉樹(其初值為1,一旦發現不滿足上述條件之一,則置cm為0),bj變數值表示迄今為止所有節點均有左右孩子(其初值為1),一旦發現乙個節點沒有左孩子或沒有右孩子時置bj為0),在遍歷完畢後返回cm的值。

對應的演算法如下:

int compbtnode(btnode * b)

else

//*p節點有左子樹

else

//bj=0:迄今為止,已有節點缺孩子

cm=0;

//而此時*p節點有左孩子,違反(2)

}

}

return cm;

}

return 1;

//把空樹當成特殊的完全二叉樹

}

判斷乙個二叉樹是否對稱

面試題裡不光要求結構上對稱,而且要求對稱結點中的內容一樣 可以使用遞迴的方法,同時比較左子樹的左結點和右子樹的右結點,比較左子樹的右結點和右子樹的左結點。如下 public class test boolean judge node leftnode,node rightnode else if l...

二叉樹 判斷乙個樹是否是平衡二叉樹

題目 給定乙個二叉樹,判斷其是否是平衡二叉樹。方法一 bool isbalancedtree treenode root bool ltree isbalancedtree root left bool rtree isbalancedtree root right if ltree rtree r...

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true 示例 2 輸入 5 1 4 3 6 輸出 false 解釋 ...