树的子结构
算法描述: 输入两棵树,判断A是不是B的子结构
解题思路:首先在B中寻找与A根节点的值相同的节点,然后从该节点入手判断接下来的二叉树是否相同很显然用地递归来实现具体算法如下:
// binaryTree.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #include <iostream> #include <string> using namespace std; struct binaryNode { int data; binaryNode *left; binaryNode *right; }; bool isSame(binaryNode *p1,binaryNode *p2) { if(p1==NULL &&p2!=NULL) { return false; } if(p2==NULL) { return true; } if(p1->data!=p2->data) { return false; }else { return isSame(p1->left,p2->left) && isSame(p1->right,p2->right); } } bool subTree(binaryNode *p1,binaryNode *p2) { if(p1==NULL) { return false; } bool isRight=false; if(p1->data==p2->data) { isRight=isSame(p1,p2); if(!isRight) { isRight=subTree(p1->left,p2); } if(!isRight) { isRight=subTree(p1->right,p2); } } return isRight; } bool isSubtree(binaryNode *p1,binaryNode *p2) { if(p1==NULL || p2==NULL) { throw new exception("the input is error"); } return subTree(p1,p2); } int _tmain(int argc, _TCHAR* argv[]) { getchar(); return 0; }