/*** 輸入兩棵二叉樹a和b,判斷b是不是a的子結構。
* 該方法是在a樹中找到乙個與b樹的根節點相等的元素的結點,
* 從這個相等的結點開始判斷樹b是不是樹a的子結構,如果找到其的乙個就返回,
* 否則直到所有的結點都找完為止。
** @param root1 樹a的根結點
* @param root2 樹b的根結點
* @return true:樹b是樹a的子結構,false:樹b是不樹a的子結構
*/
publicstatic
class
binarytreenode
public
static
boolean
hassubtree(binarytreenode root1, binarytreenode root2)
//只要樹b的根結點點為空就返回true
if (root2 == null)
//樹b的根結點不為空,如果樹a的根結點為空就返回false
if (root1 == null)
//記錄匹配結果
boolean result = false;
//如果結點的值相等就,呼叫匹配方法
if (root1.value ==root2.value)
//如果匹配就直接返回結果
if(result)
//如果不匹配就找樹a的左子結點和右子結點進行判斷
return hassubtree(root1.left, root2) ||hassubtree(root1.right, root2);
}/*** 從樹a根結點root1和樹b根結點root2開始,乙個乙個元素進行判斷,判斷b是不是a的子結構**
@param
root1 樹a開始匹配的根結點
* @param
root2 樹b開始匹配的根結點
* @return
樹b是樹a的子結構,false:樹b是不樹a的子結構
*/public
static
boolean
match(binarytreenode root1, binarytreenode root2)
//只要樹b的根結點點為空就返回true
if (root2 == null
)
//樹b的根結點不為空,如果樹a的根結點為空就返回false
if (root1 == null)
//如果兩個結點的值相等,則分別判斷其左子結點和右子結點
if (root1.value ==root2.value)
//結點值不相等返回false
如何判斷乙個二叉樹是否為另乙個二叉樹的子樹
1.遞迴的方式 struct treenode class solution bool getresult treenode p1,treenode p2 遞迴的過程如上面所示,需要注意的是這是兩個不同的遞迴過程!2.序列化然後利用kmp演算法進行模式串的匹配 kmp演算法的時間複雜度為o m n ...
二叉樹 判斷乙個樹是否是平衡二叉樹
題目 給定乙個二叉樹,判斷其是否是平衡二叉樹。方法一 bool isbalancedtree treenode root bool ltree isbalancedtree root left bool rtree isbalancedtree root right if ltree rtree r...
判斷乙個二叉樹是不是平衡二叉樹
題目 輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。分析 首先要明白平衡二叉樹的概念 平衡二叉樹必須滿足兩個條件 1 左右子樹的高度差不能大於1 2 每個根節點下面的左右子樹也必須滿足平衡二叉樹的性質。對於本題,我們首先要知道如何去求一棵二叉樹的深度,接下來我們只需要判斷每個節點是否滿足平衡二叉...