树的子结构

来源:互联网 发布:斗鱼好养吗 知乎 编辑:程序博客网 时间:2024/05/03 02:23

题目:输入两颗二叉树A和B 判断B是不是A的子结构 二叉树结点定义如下;

首先 从树根开始遍历树


如果结点与 B的根结点值相同 则继续遍历A的左子树 以及B的左子树 如果左子树相同则遍历A的右子树以及B的左子树 如果左右子树都相同则 A包含B

如果结点与B的根节点值不同 则遍历到A的左孩子 重复上述判断做孩子是否含有B 如果左子树不含有B 则遍历到A的右子树 判断其是否含有B


因此 首先遍历A 即树的中序遍历 如果结点与B的根节点值相同 则递归遍历A中当前节点与B 各自结点是否相同 

递归截止条件是达到了A或B的叶节点 




struct BinaryTreeNode{int m_nValue;BinaryTreeNode *m_pLeft;BinaryTreeNode *m_pRight;};bool  hastree(BinaryTreeNode *A,BinaryTreeNode *B){bool r=false;if(A!=NULL && B!=NULL){if(A->m_nValue==B->m_nValue)r= haschild(A,B);if(r==false)r=hastree(A->m_pLeft,B);if(r==false)r=hastree(A->m_pRight,B);}return r;}bool haschild(BinaryTreeNode *A,BinaryTreeNode *B){if(B->m_nValue !=A->m_nValue)return false;//if(B==NULL)return true;
<span style="font-family: Arial, Helvetica, sans-serif;">                 if(A==NULL)</span>

return false;
return haschild(A->m_pLeft,B->m_pLeft) && haschild(A->m_pRight,B->m_pRight);}



0 0
原创粉丝点击