二叉樹的子結構

題目:輸入兩棵二叉樹A和B,判斷樹B是不是A的子結構。

思路:主要分兩步:第一步)在樹A中找到和B的根結點的值一樣的結點;第二步)再判斷樹A中以該節點爲根結點的子樹是不是包括和樹B一樣的結構。這可用遞歸來解決。

struct BinaryTreeNode { //二叉樹節點定義
    int value;
    BinaryTreeNode *left;
    BinaryTreeNode *right;
}

bool isTreeAcontainsTreeB(BinaryTreeNode *root1,BinaryTreeNode *root2){
    if(root1 == NULL)
        return false;
    if(root2 == NULL)
        return true;
    if(root1->value != root2->value)
        return false;
    return isTreeAcontainsTreeB(root1->left,root2->right) && isTreeAcontainsTreeB(root1->right,root2->right);   
}

bool hasSubTreeCore(BinaryTreeNode *root1,BinaryTreeNode *root2){
    bool flag = false;
    if(root1->value == root2->value)
        flag = isTreeAcontainsTreeB(root1,root2);
    if(!flag && root1->left != NULL)
        flag = isTreeAcontainsTreeB(root1->left,root2);
    if(!flag && root2->right != NULL)
        flag = isTreeAcontainsTreeB(root1->right,root2);
    return flag;
}

bool hasSubTree(BinaryTreeNode *root1,BinaryTreeNode *root2){
    if((root1 != NULL && root2 == NULL)||(root1 == NULL && root2 != NULL))
        return false;
    if(root1 == NULL && root2 == NULL)
        return true;
    return hasSubTreeCore(root1,root2);
}
發佈了66 篇原創文章 · 獲贊 17 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章