C语言判断二叉树的子树
来源:互联网 发布:文本压缩算法 编辑:程序博客网 时间:2024/06/01 10:12
题目:输入两颗二叉树A和B,判断B是不是A的子结构。比如:
思路:第一步在树A中找到和B的根结点的值一样的点假设为R,第二部再判断A中以R为根结点的子树是不是包含和树B一样的结构。
代码:
#include <stdio.h>#include <stdlib.h>typedef struct _btreenode{struct _btreenode *lchild; //树的左孩子struct _btreenode *rchild; //树的右孩子int data;}BtreeNode;typedef struct _btree{struct _btreenode *root; //头结点结构体int count;}Btree;int Creat_Tree(Btree *head, int data, int pos, int count, int flag){if(head == NULL || flag != 1 || flag != 0){return -1;}BtreeNode *node = (BtreeNode *)malloc(sizeof(BtreeNode)/sizeof(char));if(node == NULL){return -1;}node->data = data;node->lchild = NULL;node->rchild = NULL;BtreeNode *parent = NULL;BtreeNode *current = head->root;int way;if(head->root == NULL){head->root = node;}else{while(count){way = pos & 1;pos = pos >> 1;parent = current;if(way = 1)current = current->rchild;elsecurrent = current->lchild;count--;}}if(way == 1)parent->rchild = node;elseparent->lchild = node;if(flag = 1)node->rchild = current;elsenode->lchild = current;head->count++;return 1;}//判断子树int Judge_son_tree(BtreeNode *node, BtreeNode *son_node){if(son_node == NULL) //递归结束标志 return 1;if(node == NULL) return -1;if(node != son_node){return -1;}return Judge_son_tree(node->rchild, son_node->rchild) && Judge_son_tree(node->lchild, son_node->lchild);}int main(){Btree *head = (Btree *)malloc(sizeof(Btree)/sizeof(char));if(head == NULL){return -1;}head->root = NULL;head->count = 0;Creat_Tree(head, 8, 0, 0 ,0 ); //插入数据。head代表头结点,8代表插入的数据,第一个0代表路径,第二个0代表在第几层,第四个0代表插入左边还是右边Creat_Tree(head, 8, 0, 1 ,0 ); //1代表在右边插入,0代表在左边插入Creat_Tree(head, 7, 1, 1 ,0 );Creat_Tree(head, 9, 0, 2 ,0 );Creat_Tree(head, 2, 2, 2 ,0 );Creat_Tree(head, 4, 2, 3 ,0 );Creat_Tree(head, 7, 6, 3 ,0 );Btree *son_head = (Btree *)malloc(sizeof(Btree)/sizeof(char));if(son_head == NULL)return -1;son_head->root = NULL;son_head->count = 0;Creat_Tree(son_head, 8, 0, 0 ,0 );Creat_Tree(son_head, 9, 0, 1 ,0 );Creat_Tree(son_head, 2, 1, 1 ,0 );if(Judge_son_tree(head->root, son_head->root)) //调用判断函数,如果相等就输出YES,否则输出NO。printf("YES\n");elseprintf("NO\n");return 0;}
阅读全文
3 0
- C语言判断二叉树的子树
- 二叉树子树判断
- 二叉树判断子树问题
- 二叉树判断子树问题
- 判断二叉树B是不是二叉树A的子树
- 二叉树的子树
- 获取二叉树的叶子数、高度以及左右子树的交换的C语言实现
- 判断一个二叉树是否是另一个的子树
- 剑指offer15--判断一个二叉树是不是另一个的子树
- 二叉搜索树判断子树相等
- 判断二叉树是否为子树
- 如何判断一棵二叉树树是否为另一棵二叉树的子树
- 百度笔试题:判断一个二叉树是否是另一颗二叉树的子树
- 判断一棵二叉树是不是另一棵二叉树的子树
- 判断一棵二叉树是否是二叉树的子树
- 判断一棵二叉树是否是另一棵二叉树的子树
- 判断一棵二叉树是否为另一棵二叉树的子树,Python实现
- 如何判断一个二叉树是否为另一个二叉树的子树
- T-SQL和安全机制
- EA&UML日拱一卒-活动图::Variable Actions(续)
- HDU 6090 计算权值 思维题
- STM8L051x SPI Master
- 算法竞赛入门经典习题3-6 &3-7 进制转换
- C语言判断二叉树的子树
- css 背景定位 文字样式及文本溢出隐藏···
- hdu 4544 湫湫系列故事——消灭兔子
- Java线程池ThreadPoolExecutor小结
- JS——事件
- JavaEE学习笔记分享之初识JavaEE
- [置顶] Android 进程常驻(0)----MarsDaemon使用说明
- HDU 6092 Rikka with Subset
- HDU 6090 Rikka with Graph