题目:
有两颗二叉树,判断其中一颗A是否是另一颗B的子树。
解决思想:
按先序遍历树B的每个结点,判断结点是否和树A的根结点相同。若相同,再判断以该结点为根结点的树是否有和树A相同的子树。
代码:
#include <iostream>
using namespace std;
struct BTree
{
int m_val;
BTree *m_lchild;
BTree *m_rchild;
};
bool DoesTree1HaveTree2(BTree *root1, BTree *root2);
//相当于以前序遍历判断每个结点是否和子树的根结点相同
bool HasSubTree(BTree *root1, BTree *root2)
{
if (root1 == NULL || root2 == NULL)
return false;
bool result = false;
if (root1->m_val == root2->m_val) //找到一个结点与目标子树根结点相同
result = DoesTree1HaveTree2(root1