當前位置:學識都>好好學習>考研>

C++編寫算法判斷兩棵二叉樹是否相等

學識都 人氣:8.56K

         筆試題目: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))

;

}