树的子结构

来源:互联网 发布:职人咖啡 知乎 编辑:程序博客网 时间:2024/05/17 03:28

题目:输入两颗树A和B,判断B是不是A的子结构。

解答:应该想到递归解决问题。那么递归函数和终止条件是什么呢?首先如果当前的两个节点的值相等,那么递归地判断A中节点的左右子树是否分别包含B中节点的左右子树;如果两个节点的值不相等,那么递归地判断A中节点的左子树是否包含B中节点以及A中节点的右子树是否包含B中节点。(递归函数)然后如果A中节点为空,但B不为空,则返回false;如果B中节点为空,返回true。(终止条件)

struct TreeNode{int m_data;TreeNode* m_pLeft;TreeNode* m_pRight;TreeNode(const int data = 0,TreeNode* left=NULL,TreeNode* right=NULL):m_data(data),m_pLeft(left),m_pRight(right){}};bool SubTree(TreeNode* pRoot1,TreeNode* pRoot2){if(NULL == pRoot1 && NULL != pRoot2)return false;else if(NULL == pRoot2)return true;else if(pRoot1->m_data == pRoot2->m_data){return SubTree(pRoot1->m_pLeft,pRoot2->m_pLeft) &&SubTree(pRoot1->m_pRight,pRoot2->m_pRight);}else{return SubTree(pRoot1->m_pLeft,pRoot2) || SubTree(pRoot1->m_pRight,pRoot2);}}


0 0