树的子结构

    xiaoxiao2022-07-14  158

    树的子结构

    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

    思路

    判断A树中当前结点是否与B树的根结点相同,如果不相同,接着遍历A树;如果相同,则A树从当前结点与B树从根结点开始同步遍历,直至B树遍历完且遍历过程中A、B两树对应结点都相同,则B树是A树的子结构;否则返回,重新在A树中寻找与B树根结点相同的结点,接着遍历。

    代码(c++)

    /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: bool judge(TreeNode* pRoot1, TreeNode* pRoot2){ if(pRoot2==NULL) return true; if(pRoot1==NULL) return false; if(pRoot1->val!=pRoot2->val) return false; return judge(pRoot1->left,pRoot2->left) && judge(pRoot1->right,pRoot2->right); } bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { bool res=false; if(pRoot1!=NULL&&pRoot2!=NULL){ if(pRoot1->val==pRoot2->val){ res=judge(pRoot1,pRoot2); } if(res==false){ res=HasSubtree(pRoot1->left,pRoot2); } if(res==false){ res=HasSubtree(pRoot1->right,pRoot2); } } return res; } };
    最新回复(0)