判斷兩個二叉樹是否相等c語言,判斷兩個二叉樹是否相等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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-02 14:39
下一篇 2024-12-02 14:39

相關推薦

  • 利用Python實現兩個鏈表合併為一個有序鏈表

    對於開發工程師來說,實現兩個鏈表合併為一個有序鏈表是必須掌握的技能之一。Python語言在鏈表處理上非常便利,本文將從多個方面詳細闡述如何利用Python實現兩個鏈表合併為一個有序…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python定義兩個列表的多面探索

    Python是一種強大的編程語言,開放源代碼,易於學習和使用。通過Python語言,我們可以定義各種數據類型,如列表(list)。在Python中,列表(list)在處理數據方面起…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28

發表回復

登錄後才能評論