剑指offer 面试题18—树的子结构
2015-05-10 20:34
417 查看
题目:
输入两颗二叉树A和B,判断B是不是A的子结构。
基本思想:
1. 在树A中找到和B的根节点的值一样的节点R;(递归遍历)
2. 再判断树A中以R为根节点的子树是不是包含和树B一样的结构。(递归遍历)
输入两颗二叉树A和B,判断B是不是A的子结构。
基本思想:
1. 在树A中找到和B的根节点的值一样的节点R;(递归遍历)
2. 再判断树A中以R为根节点的子树是不是包含和树B一样的结构。(递归遍历)
#include <iostream> #include <deque> using namespace std; //二叉树结点定义 typedef struct BiTreeNode{ int data; //左右孩子指针 struct BiTreeNode *lchild; struct BiTreeNode *rchild; }BiTreeNode,*BiTree; //按先序序列创建二叉树 int CreateBiTree(BiTree &T) { int data; //按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树 cin>>data; if(data == -1) { T = NULL; } else { T = (BiTree)malloc(sizeof(BiTreeNode)); T->data = data;//生成根结点 CreateBiTree(T->lchild);//构造左子树 CreateBiTree(T->rchild);//构造右子树 } return 0; } //第二步的判断 bool T1hasT2(BiTree T1,BiTree T2) { if(T2==NULL) return true; if(T1==NULL) return false; if(T1->data!=T2->data) return false; return T1hasT2(T1->lchild,T2->lchild)&&T1hasT2(T1->rchild,T2->rchild); } //第一步的判断 bool foo(BiTree T1,BiTree T2) { bool result = false; if(T1!=NULL && T2!=NULL) { if(T1->data == T2->data) result=T1hasT2(T1,T2); if(!result) result=foo(T1->lchild,T2); if(!result) result=foo(T1->rchild,T2); } return result; } void main() { BiTree T1,T2; CreateBiTree(T1); CreateBiTree(T2); cout<<foo(T1,T2)<<endl; }
相关文章推荐
- 剑指offer面试题18:树的子结构
- 剑指offer 面试题18 判断二叉树B是否是A的子结构
- 剑指offer-面试题18 判断二叉树B是不是二叉树A的子结构
- 【面试题】剑指offer18--判断一个二叉树是否为另一个二叉树的子结构
- 剑指offer——面试题18:树的子结构
- 剑指Offer面试题18(Java版):树的子结构
- [剑指offer][面试题18]树的子结构
- 剑指Offer--面试题18:数的子结构--Java实现
- 剑指offer--面试题18:树的子结构
- 剑指Offer之面试题18:树的子结构
- 【剑指offer】面试题18:树的子结构
- 剑指offer-面试题18.树的子结构
- 剑指offer面试题18-树的子结构
- 剑指Offer面试题18(Java版):树的子结构
- 【剑指Offer学习】【面试题18 :树的子结构】
- 【剑指offer】面试题18:输入两颗二叉树A和B,判断B是不是A的子结构?
- 剑指offer面试题18-树的子结构
- 剑指Offer_面试题18_树的子结构
- 剑指offer面试题18——树的子结构(递归)
- [剑指offer]面试题18:树的子结构