判斷兩個二叉樹是否相同
遞迴解法:
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,...