本文目錄一覽:
- 1、C++編寫演算法判斷兩棵二叉樹是否相等
- 2、判斷兩個二叉樹是否相等c語言
- 3、設計一個分治演算法,判斷兩個二叉樹是否相等。
- 4、數據結構問題”編寫一個判斷兩顆二叉樹是否相等的程序”
- 5、判斷兩棵二叉樹是否相似 (用c++完成) 要能運行的 謝謝
C++編寫演算法判斷兩棵二叉樹是否相等
C++編寫演算法判斷兩棵二叉樹是否相等
筆試題目:C++編寫演算法判斷兩棵二叉樹是否相等
題目:請實現兩棵樹是否相等的比較,相等返回0否則返回其他值。
解析:A、B兩棵樹相等,當且僅當RootA-c == RootB-c,而且A的.左右子樹對應相等或者左右互換後相等。
思想是使用分治的方法,先判斷當前節點是否相等(需要處理為空、是否都為空、是否相等),如果當前節點不相等,直接返回兩棵樹不相等;如果當前節點相等,那麼就遞歸的判斷他們的左右孩子是否相等。因為這裡是普通的二叉樹,所以A的左、右子樹和B的右、左子樹相等也是可以的。
C++代碼:
#include
using namespace std;
typedef struct TreeNode{
char c;
struct TreeNode * left;
struct TreeNode * right;
};
/*判斷兩棵二叉樹是否相等,如果相等返回0,如果不相等則返回1*/
int compareTree(TreeNode* tree1, TreeNode* tree2){
//用分治的方法做,比較當前根,然後比較左子樹和右子樹
bool tree1IsNull = (tree1==NULL);
bool tree2IsNull = (tree2==NULL);
if(tree1IsNull != tree2IsNull){
return 1;
}
if(tree1IsNull tree2IsNull){
//如果兩個都是NULL,則相等
return 0;
}
//如果根節點不相等,直接返回不相等,否則的話,看看他們孩子相等不相等
if(tree1-c != tree2-c){
return 1;
}
return (compareTree(tree1-left,tree2-left)compareTree(tree1-right,tree2-right))
|
(compareTree(tree1-left,tree2-right)compareTree(tree1-right,tree2-left))
;
} ;
判斷兩個二叉樹是否相等c語言
判斷兩個二叉樹是否相等c語言通常可以用遞歸的函數來實現。在這個遞歸函數里,總的值函數,就等於根據碘元素相同,並且左子樹相等,並且右子樹相等
設計一個分治演算法,判斷兩個二叉樹是否相等。
判斷當前節點是否相等, 各個子樹是否相等, 嵌套調用.
輸入當前節點, 輸出是否相等
1, 判斷當前節點是否相等, 不等則返回不等.
2, 判斷左子樹是否相等, 不等則返回不等.
3, 判斷左子樹是否相等, 不等則返回不等.
4, 返回相等
數據結構問題”編寫一個判斷兩顆二叉樹是否相等的程序”
2、程序源代碼:
public class SimiliarTreeTest {
public static boolean test(BinNode t1,BinNode t2){
if(t1==nullt2==null)
return true;
else if(t1!=nullt2!=null)
{
return test(t1.left,t2.left)test(t1.right,t2.right);
}
return false;
}
}
3、測試類:
public class SimiliarilityTest {
public static void main(String[] args){
BSTInteger intTree=new BSTInteger();
BSTCharacter charTree=new BSTCharacter();
BSTString strTree=new BSTString();
Integer[] numbers={14,15,2,26,36,11,25,58,47,44,16,1};
Character[] chars={14,15,2,26,36,11,25,58,47,44,16,1};
String[] strs={“this”,”is “,”so “,”dispointed”,”and “,”i “,”am”,”trying”};
for(int i=0;istrs.length;i++){
strTree.insert(new BinNodeString(strs[i]));
}
for(int i=0;inumbers.length;i++)
intTree.insert(new BinNodeInteger(numbers[i]));
for(int i=0;ichars.length;i++)
charTree.insert(new BinNodeCharacter(chars[i]));
boolean b=SimiliarTreeTest.test(intTree.root, strTree.root);
System.out.println(“intTree and strTree are similiar with each other?”+b);
System.out.println(“—————–“);
b=SimiliarTreeTest.test(intTree.root, charTree.root);
System.out.println(“intTree and charTree are similiar with each other?”+b);
}
}
(註明:其中BST為二叉查找樹)
判斷兩棵二叉樹是否相似 (用c++完成) 要能運行的 謝謝
bool IsSimilar(const BiTree T1, const BiTree T2)
{
if (!T1 !T2)//如果都是空樹,則相似
{
return true;
}
else if (!T1 || !T2)//如果一者是空樹,另一者不為空樹,則不相似
{
return false;
}
else//否則是否相似還需進一步判斷
{
if (IsSimilar(T1-Lchild, T2-Lchild) IsSimilar(T1-Rchild, T2-Rchild))//此時判斷左右子樹是否都相似
{
return true;//如果是,則二叉樹相似
}
else
{
return false;//否則不相似
}
}
}二叉樹的存儲類型是嚴奶奶的數據結構教的,所以自己把結構補全就可以運行了。
另外有人還比較了數據域的信息,相似只是結構上相同,或者說同構,不需要數據域相同,否則就是全等了。
還有,注意下面這種演算法是錯誤的:
bool IsSimilar(const BiTree T1, const BiTree T2)
{
if (!T1 !T2)//如果都是空樹,則相似
{
return true;
}
else if (!T1 || !T2)//如果一者是空樹,另一者不為空樹,則不相似
{
return false;
}
else//否則是否相似還需進一步判斷
{
return IsSimilar(T1-Lchild, T2-Lchild);
return IsSimilar(T1-Rchild, T2-Rchild);
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/194539.html