当前位置:   article > 正文

C语言——二叉树_c语言定义二叉树,分别用函数实现下列功能: 1) 创建一棵含有若干个结点的二叉

c语言定义二叉树,分别用函数实现下列功能: 1) 创建一棵含有若干个结点的二叉

二叉树

二叉树

树的任意节点的子节点不超过2个,而且区分左右(有序树),这样的树称为二叉数。

二叉树

二叉树在内存中的储存
  1. 顺序储存
    用储存位置表示节点之间的逻辑关系
    第i个节点的左子节点对应对应的序号为:2i。
    第i个节点的右子节点对应对应的序号为:2
    i + 1 。
    在这里插入图片描述
  2. 链式储存
    用左孩子指针和右孩子指针表示节点之间的逻辑关系
    节点设计:
struct node{
	char data;	//数据域
	//指针域
	struct node * plchild;	//左孩子指针
	struct node * prchild;	//右孩子指针
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

(1) 创建二叉树
参考先序遍历,第一步先对根节点进行操作,再遍历左节点,后遍历右节点。

bool create_btree(struct node ** proot){	//*proot是指针变量,指向根节点
	char ch;	//根节点所存放的数据
	scanf("%c", &ch);	//从键盘输入到缓存中,每次只拿一个字符
	
	//操作根节点
	if(ch == '*'){
		*proot = NULL;	//如果从缓存中得到的是'*',不创建节点
	}
	
	if(ch != '*'){
		*proot = malloc(sizeof(struct node));	//创建节点
		if(*proot == NULL)
			return false;
		(*proot)->data = ch;	//写入数据
	}
	
	//遍历左子树
	create_btree(&((*proot)->plchild));	//&((*proot)->plchild)获取结构体中左子树指针变量的地址
	
	//遍历右子树
	create_btree(&((*proot)->prchild));	//&((*proot)->prchild)获取结构体中右子树指针变量的地址
	return true;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

(2)遍历二叉树
先序遍历:先访问根节点,再先序遍历左子树,最后先序遍历右子树;
中序遍历:先中序遍历左子树,再访问根节点,最后中序遍历右子树;
后续遍历:先后序遍历左子树,再后序遍历右子树,最后访问根节点;
按层遍历:从上到下,从做到右,算法:

将头节点的地址入队
while(队列不为空){
	出队首节点
	将左节点的地址入队
	将右节点的地址入队
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

学习笔记,欢迎纠错

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/514406
推荐阅读
相关标签
  

闽ICP备14008679号