判斷兩個二叉樹是否相同

2021-06-23 05:06:39 字數 1499 閱讀 8718

判斷兩個二叉樹是否相同

遞迴解法:

public boolean issametreerec(treenode p, treenode q) 

if (p == null && q == null) else else

} else

} }

第一次寫了乙個是這樣的,自己覺得也可以,提交時不能ac,想了下根本是自己演算法立足點不對,分享下:

對於一棵二叉樹,有前序序列或後序序列與中序序列能否就此確定此二叉樹?

答案是否定的,當二叉樹中節點值全部相等時,二叉樹的形態不能被確定

如果二叉樹中的前序遍歷與中序遍歷序列裡存在值不相等的節點,那麼可以通過前序序列與中序序列確定這棵二叉樹

如果存在值不相等的節點,那麼判斷兩個二叉樹是否相等可以這樣:分別前序,中序遍歷兩個二叉樹,並儲存值結果集,然後再分別迴圈比較兩個樹的前序遍歷結果集

與中序遍歷結果集,一樣,則兩棵樹一樣。

public boolean issametree(treenode p, treenode q) 

linkedlistppreorderlist = (linkedlist) preorderlistrec(p);

linkedlistpinorderlist = (linkedlist) inorderlistrec(p);

linkedlistqpreorderlist = (linkedlist) preorderlistrec(q);

linkedlistqinorderlist = (linkedlist) inorderlistrec(q);

ret = issamelist(pinorderlist, qinorderlist)

& issamelist(ppreorderlist, qpreorderlist);

return ret;

} public listpreorderlistrec(treenode root)

public void preorderlist(treenode root, listret) else }

@suppresswarnings("null")

public listinorderlistrec(treenode root)

public void inorderlist(treenode root, listret) else

} public boolean issamelist(listlist1, listlist2) else

}} return ret;

}

演算法二真不是乙個可行(不能ac)的結,但演算法二中這些函式之前已經實現,呼叫方便,可是考慮不夠縝密出現了漏解情況。

由此想到,如果乙個演算法不是深入其內部結構去實現它,而是通過其他一些演算法堆積,那麼就要注意一些邊界問題了。以後很多都是這樣的,對於大問題並不是想著基礎編碼去實現,更多的是呼叫已經寫好的方法(比如本地方法),就要仔細考慮問題的邊界是怎樣的,該怎樣解決

比較兩個二叉樹是否相同

也許你看過書,也許你背過 都不重要。重要的是,你能將你看過的變成自己的想法,然後實現它 不在其他 的陰影下活著,讓你的 舞動起來!也許 可能看起來有點不簡潔 思想 可以按照遞迴的思路進行,左子樹是否相等,右子樹是否相等進行遍歷 bool equal btnode pa,btnode pb if pa...

判斷兩個二叉樹是否相同(c 遞迴實現)

判斷兩棵二叉樹是否為同一棵樹,需要比較兩個方面 一 結構是否相同 二 每個節點上的元素是否相同 當二者都滿足的時候才可判定二者為同一棵二叉樹。結構相同包括節點的個數以及每個節點上的子樹相同。下面是 實現。include using namespace std typedef struct node ...

判斷二叉樹是否相同

判斷二叉樹是否相同 當root1的左子樹與root2的左子樹相同,root1的右子樹與root2的右子樹相同時,這兩顆二叉樹相同。當root1的左子樹與root2的右子樹相同,root1的右子樹與root2的左子樹相同時,這兩顆二叉樹同樣相同。1 bool isequals bnode root1,...