判斷兩顆二叉樹是否相似的兩種方法

2022-10-03 23:54:15 字數 1015 閱讀 3706

名稱:判斷兩個二叉樹是否相似

說明:此處的兩個方法乙個是非遞迴,乙個是遞迴演算法。其實兩個演算法的本質思路是一樣的就是,判斷位置相同的兩www.cppcns.com個結點是否同時為空或同時不為空。只是具體的實現不一樣。

對於層次遍曆法:此處不小心用錯了,本應該用佇列來當作排列下一層元素的。歪打正著,此處用棧也可以,只是判斷的結點順序不一樣。佇列的話,是從每一層的左端到右端。棧的話,是從右端到左端。在此處都沒影響。我去,有發現一點,要從右到左訪問一層的元素的話,應該用棧。

對於遞迴,看起來比非遞迴要簡單不少。基本的思路很簡單,要注意的是,在程式需要從子樹接收返回是否相似的資訊。這樣的話,有乙個問題,就是必須等樹完全判斷完才可以最終返回。不想上面的,過程中發現不一樣就可以立即返回了。

//層次遍曆法判斷兩棵樹是否相似

bool issemblable1(bitree t1,bitree t2)

else if( p1->lchild != null || p2->lchild != null) //如果p1的左子樹為空,但是p2的左子樹不為空,或者相反

return false;

if(p1->rchild != null && p2->rchild != null) //如果p1和p2的右子樹都程式設計客棧不為空時

else if(p1->rchild != null || p2->rchild != null) //如果p1的右子樹為空,但是p2的右子樹不為空,或者相反

return false;

//訪問完兩棵樹的當前結點後,置空讓下一次迴圈彈出棧中元素(此處其實直接彈出元素也行)

p1 = null;

p2 = nul程式設計客棧l;

}else if(p1 != null || p2 != null) 程式設計客棧 //當前節點有乙個為空

return false;

else

} return true;

}//遞迴判斷兩棵樹是否相似

bool issemblable2(bitree t1,bitree t2)}總結

判斷兩顆二叉樹是否是相同的樹

題目描述 給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同 如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的 先考慮空樹的情況 如果兩個樹都為空,那麼這兩棵樹肯定是相同的 如果其中任意一棵樹為空,兩棵樹肯定不相同 當且僅當兩棵樹的根 左子樹 右子樹都相同,這兩棵樹才相同 class s...

輸入兩顆二叉樹A,B,判斷B是不是A的子結構

方法一 最簡單就是首先判斷兩棵樹的根節點是否相同,如果相同則判斷兩顆樹的左節點是否對應,右結點是否對應,如果兩個根節點值不同,主樹左節點與子樹根節點判斷,主樹右結點與子樹根節點判斷,然後再判斷對應節點是否相同即可 複雜度 o m n 方法二 首先兩棵樹序列化為字串,然後就是判斷字串之間的包含問題了,...

判斷二叉樹是否為完全二叉樹的兩種方法

struct node node 30 void dfs int root,int index dfs node root lchild,index 2 dfs node root rchild,index 2 1 if maxindex n n為節點個數 cout yes else cout no...