天天看點

java比兩棵樹是否相等_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;

};

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))

;

}