劍指offer上的一道程式設計練習,如何確定二叉樹a包含一棵相對小一點的二叉樹b?
思路:用兩個函式實現,第乙個首先判斷根結點是否相等,第二個函式繼續判斷子結構是否相等
函式一:
第一步,首先從根結點入手,判斷proota的值是否與prootb的根結點的值是否相等。若相等,則在比較a樹的子結構是否包含b數子結構,此時轉入函式二;
若不相等 則轉入:
第二步,遞迴進入函式一,判斷proota的左子樹的值是否與prootb的根結點的值是否相等,若相等則轉入函式二;
若還不相等 則轉入:
第三步,遞迴進入函式一,判斷proota的右子樹的值是否與prootb的根結點的值是否相等,若相等則轉入函式二;
函式一**如下:
bool hassubtree(binarytreenode* proot1, binarytreenode* proot2)
}
最後。遞迴完成後,若左右子樹中的根結點都不相等,說明a樹不含有b樹。
函式二:
在根結點相等的基礎上,遞迴的判斷a樹的左右子樹的值是否與b數的左右子樹的值相等,
若是在prootb全部遍歷結束時,則說明a樹含有b樹,
若是在proota全部遍歷結束時,則說明a樹不含有b樹。
函式二**如下:
bool dosetree1hastree2(binarytreenode* proot1, binarytreenode* proot2)
判斷一顆二叉樹是是否是另一顆樹的子樹。
什麼樣的情況下,某一棵樹會成為另一棵樹的子數呢?子樹的根節點是某一棵樹的某個節點,接下來的子節點也相同,則該樹是另一棵樹的子集。首先找到與根節點相同的節點,在進行遍歷,可使用遞迴法。template struct treenode template bool check treenode root1...
另一顆樹的子樹
給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹。s 的乙個子樹包括 s 的乙個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹。解題思路 先從跟結點開始,看兩顆樹的根節點是否相同,然後遞迴遍歷兩棵樹的左右子樹,如果都相同返回true 否則讓樹s左右子樹...
驗證一顆二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。這裡有一種錯誤的思路 判斷當前節點大於左節點,小於右節點,以此遞迴下去,當不滿足上面條件就返回false...