数的子结构
来源:互联网 发布:淘宝上退款多久能到账 编辑:程序博客网 时间:2024/05/17 01:28
需求:
输入两颗二叉树A和B,判断B树是不是A树的子结构。如果是返回1,不是返回0。
思路
解决这个问题可以大致分为两步:
第一步:在树A中找到和树B的根节点的值一样的节点R,
第二步:判断树A中以R为根节点的子树是不是包含和树B一样的子结构。
因为在计算机中,如果两个浮点树判断大小会出现误差。不能直接写x==y
所以如果两个数的差值如果很小,那么我们就认为这两个数字是相等的。
实现
//判断两个数是否相同(比较精确)int equal(int num1, int num2){ if ((num1 - num2 > -0.0000001) && (num1 - num2 < 0.0000001)){ return 1; } return 0;}
找到A树中找到和树B的根节点值相同的节点R
int HasSubTree(BTNode *root1, BTNode *root2){ int flag = 0; if (root1&&root2){ if (equal(root1->data, root2->data)){//当前两颗二叉树的节点数据域相同 flag = doesTree1HaveTree2(root1, root2); } if (!flag){//向左遍历找到和子树根节点数据域相同的二叉树节点 flag = HasSubTree(root1->left, root2); } if (!flag){//向右遍历扎到和子树根节点数据域相同的二叉树节点 flag = HasSubTree(root1->right, root2); } } return flag;}
判断树A中以R为节点的根节点是不是包含和树B一样的子结构。
int doesTree1HaveTree2(BTNode *root1, BTNode *root2){ if (!root2){ return 1; } if (!root1){ return 0; } return doesTree1HaveTree2(root1->left, root2->left) && doesTree1HaveTree2(root1->right, root2->right);}
调试部分:
//定义二叉树的节点typedef struct node{ int data; struct node *left; struct node *right;}BTNode;//创建二叉搜索树BTNode* creatBinSortTree(int data[], int len){ BTNode *root = NULL, *pa = NULL, *c = NULL, *p = NULL; for (int i = 0; i < len; i++){ //为新节点分配单元 p = (BTNode*)malloc(sizeof(BTNode)); //初始化新节点 p->data = data[i]; p->left = p->right = NULL; if (!root){ root = p; } else{ c = root; while (c){ pa = c; if (p->data < c->data){ c = c->left; } else{ c = c->right; } } if (pa->data > p->data){ pa->left = p; } else{ pa->right = p; } } } return root;}int main(void){ int data[8] = { 3, 2, 5, 8, 4, 7, 6, 9 }; int data1[3] = { 1, 2, 3 }; BTNode *root1 = creatBinSortTree(data, 8); BTNode *root2 = creatBinSortTree(data1, 3); BTNode *root3 = creatBinSortTree(data, 3); printf("%d \n",HasSubTree(root1,root2)); printf("%d ",HasSubTree(root1,root3)); system("pause"); return 0;}
调试结果:
阅读全文
0 0
- 数的子结构
- 数的子结构
- Q18:数的子结构
- 18、数的子结构
- 树——数的子结构
- 算法题/数的子结构
- 树------判断数A为数B的子结构
- 剑指offer(十七)数的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- Pyhton开发入门心得
- [面向对象总结]
- C++中endl的本质是什么
- 多线程
- apaceh2.4虚拟多站点httpd-vhosts.conf
- 数的子结构
- 常用集合类总结(java)
- 【JavaSE_学习笔记】BigDecimal类与BigInteger类
- 数独问题的c++解决
- Maven基础
- [caffe使用]caffe使用中可能遇到的问题总结
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Angular4 中显示内容的 CSS 样式
- 在UITableView的header上加阴影