一棵二叉树是否为另一棵二叉树的子树
2016-03-31 11:32
316 查看
未测试边界条件
#include <iostream> using namespace std; struct node{ int data; node *left; node *right; node(const int &x, node *l = NULL, node *r = NULL){ data = x; left = l; right = r; } ~node(){} }; bool treecore(node *tree1, node *tree2){ bool flag = false; if (tree2 == NULL) return true; if (tree1 == NULL) return false; if (tree1->data == tree2->data){ return treecore(tree1->left, tree2->left) && treecore(tree1->right, tree2->right); //两种写法是一样的,程序在判断&&前一个条件为false时会直接返回false //flag = treecore(tree1->left, tree2->left); //if (!flag) // return false; //flag = treecore(tree1->right, tree2->right); //if (!flag) // return false; //return true; } return false; } bool subtree(node *tree1, node *tree2){ bool flag = treecore(tree1, tree2); if (!flag && tree1 != NULL) flag = subtree(tree1->left, tree2); if (!flag && tree1 != NULL) flag = subtree(tree1->right, tree2); return flag; } int main(){ node *tmp; node *tree1 = new node(8); tmp = new node(8); tree1->left = tmp; tmp = new node(7); tree1->right = tmp; tmp = new node(9); tree1->left->left = tmp; tmp = new node(2); tree1->left->right = tmp; tmp = new node(4); tree1->left->right->left = tmp; tmp = new node(7); tree1->left->right->right = tmp; node *tree2 = new node(8); tmp = new node(9); tree2->left = tmp; tmp = new node(7); //改成7则不是子树 tree2->right = tmp; bool isSubtree = subtree(tree1, tree2); cout << isSubtree <<endl; int ttt = 0; return 0; }
相关文章推荐
- SDK Location not found Android Studio + Gradle
- 如何检测一个aspx页面的速度慢的原因
- Bitmap 传值
- android CoordinatorLayout与滚动的处理
- struts2中怎样动态指定执行方法
- html meta标签
- Kafka消息的可靠性测试--针对来疯直播业务的方案选择
- git 命令错误记录
- svn命令中文教程
- 第三章学习笔记
- 解决jdk版本问题导致eclipse/myeclipse启动出错
- java中final和static的简单的区别
- linux 查看文件夹个数
- Android 性能分析工具之 TraceView 使用说明
- 欢迎使用CSDN-markdown编辑器
- Android 单元测试
- Problem 2121 神庙逃亡(FZU)
- 用C#实现网络爬虫(二)
- 监听cell 滑动到 摸个分区
- Fragment之间通过Activity相互传值和调用的2个方式