二叉树相关操作
来源:互联网 发布:linux grep命令详解 编辑:程序博客网 时间:2024/04/26 08:19
创建二叉树
- 从键盘输入字符创建二叉树
BTree CreateTleft(){ BinaryTree* temp = NULL; ElemType a = 0; scanf_s("%c", &a); if (a != '#') { temp = BuyNode(); temp->data = a; temp->leftchild = CreateTleft();//先建立左孩子,再建立右孩子,左孩子递归遇到空返回,再递归右孩子 temp->rightchild = CreateTleft(); } return temp;}
核心思想:输入字符,判断该字符是否为空,上面的代码以#代表空(NULL),若不为空,建立新的结点,将字符赋值给该结点,并对该结点的左孩子和右孩子进行相同的遍历。
1.2创建树,不同的传值方式
BTree CreateTmiddle_string(char** const p){ BinaryTree* node = NULL; if (**p != '#' && *p != NULL && **p != NULL) { node = BuyNode(); node->data = (**p); node->leftchild = CreateTmiddle_string(&(++*p)); node->rightchild = CreateTmiddle_string(&(++*p)); } return node;}
核心思想:和第一个创建树的思路是一样的,不同的是其传值方式不同,采用了二级指针的方式,用到了引用,希望后续可以看看这方面的书。
2.查找二叉树的大小
int Size_BiTree(BinaryTree* ptr){ if (ptr != NULL) { return (Size_BiTree(ptr->leftchild)+Size_BiTree(ptr->rightchild)+1); } return 0;}
核心思想:一颗树的结点个数等于左子树结点数加右子树的结点数加1,递归思想,查找每个节点。
3.遍历第K层结点
void floor_orderk(BinaryTree* ptr, int k)//遍历第几层的结点{ if (ptr == NULL || k < 0) { return; } degreeorderk(ptr, k);}void degreeorderk(BinaryTree* ptr, int k){ if (ptr != NULL&&k == 0) { printf("%c ", ptr->data); } if (ptr->leftchild != NULL) { degreeorderk(ptr->leftchild,k-1); } if (ptr->rightchild != NULL) { degreeorderk(ptr->rightchild,k-1); }}
核心思想:遍历每个节点,若该结点在第K层则打印出来,通过传递k值来确定是否在第k层。若打印第0层,则只需要递归一次,若需要打印第5层,则需要递归5次,所以用k是否递归到,及减减的次数来判断。
4.判断两个树是否相同
bool Equal(BinaryTree *pa, BinaryTree *pb){ if (pa != NULL&&pb != NULL&&pa->data==pb->data) { Equal(pa->leftchild, pb->leftchild); Equal(pa->rightchild, pb->rightchild); return true; } return false;}
核心思想:同时遍历两个树的左右孩子和根节点,比较值和结构是否相同。
5.查找双亲结点
BTree Parent(BinaryTree *ptr, BinaryTree *child){ if (ptr==NULL||ptr->leftchild== child || ptr->rightchild == child) { return ptr; } else { BinaryTree* s = Parent(ptr->leftchild, child); if (s == NULL) { s = Parent(ptr->rightchild, child); } return s; } }
核心思想:遍历每个节点,若其左右孩子中有一个为child结点,则返回该结点,否则向下遍历。
6.按值查找结点
BTree FindValue(BinaryTree *ptr, ElemType x){ if (ptr == NULL|| ptr->data == x) { return ptr; } else { BinaryTree* s = FindValue(ptr->leftchild, x); if (s == NULL) { s = FindValue(ptr->rightchild, x); } return s; }}
核心思想:同查找结点是同样的思路。
阅读全文
0 0
- 二叉树相关操作
- 二叉树相关操作
- 二叉树相关操作
- 二叉树相关操作
- 二叉树 相关操作
- 二叉树相关操作
- 二叉树相关操作
- 二叉树相关操作
- 二叉树的相关操作
- 二叉树相关操作收集
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树相关操作2
- 二叉树相关操作之一
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- Solr 热更新,不重启修改配置文件
- Tomcat文件服务器搭建过程详解
- Date类和Calendar类
- Mac OS X 下安装 TensorFlow
- UVa 105|The Skyline Problem|暴力|线段树
- 二叉树相关操作
- 数据标注工具
- Codeforces 7C Line(拓展欧几里得)
- 表达式语言 Spring Expression Languag
- C语言猜数字游戏,范围为1到100,直到猜对为止,能重复进行多次
- 查看Linux系统版本信息
- poj 1915
- 初等算法(一)——插入排序法
- 唯一分解定理(数论)