大家好,今天小编关注到一个比较有意思的话题,就是关于层次遍历c语言的问题,于是小编就整理了3个相关介绍层次遍历c语言的解答,让我们一起看看吧。
二叉树的层次遍历?
设计一个算法层序遍历二叉树(同一层从左到右访问)。思想:用一个队列保存被访问的当前节点的左右孩子以实现层序遍历。
void HierarchyBiTree(BiTree Root){
LinkQueue *Q; // 保存当前节点的左右孩子的队列
InitQueue(Q); // 初始化队列
if (Root == NULL) return ; //树为空则返回
BiNode *p = Root; // 临时保存树根Root到指针p中
Visit(p->data); // 访问根节点
if (p->lchild) EnQueue(Q, p->lchild); // 若存在左孩子,左孩子进队列
if (p->rchild) EnQueue(Q, p->rchild); // 若存在右孩子,右孩子进队列
while (!QueueEmpty(Q)) // 若队列不空,则层序遍历 { DeQueue(Q, p); // 出队列
怎样中序遍历一棵树或森林~~~~注意是树,不是二叉树?
6.7 树和森林的遍历 树的遍历可有三条搜索路径: 先根(次序)遍历: 若树不空,则先访问根结点,然后依次先根遍历各棵子树。
后根(次序)遍历: 若树不空,则先依次后根遍历各棵子树,然后访问根结点。按层次遍历: 若树不空,则自上而下自左至右访问树中每个结点。森林的遍历 先序遍历(对森林中的每一棵树进行先根遍历) 若森林不空,则 访问森林中第一棵树的根结点; 先序遍历森林中第一棵树的子树森林; 先序遍历森林中(除第一棵树之外)其余树构成的森林。中序遍历(对森林中的每一棵树进行后根遍历) 若森林不空,则 中序遍历森林中第一棵树的子树森林; 访问森林中第一棵树的根结点; 中序遍历森林中(除第一棵树之外)其余树构成的森林。顺序存储的二叉树是如何创建和遍历的?
说一下创建,因为底层存储一般都选择数组和链表,所以对二叉树有一定的要求,存储完全二叉树选择数组存储,比较节省空间,而且通过下标可以快速访问元素;非完全二叉树使用数组存储会有很多空洞,可以选择链表,用指针来指向左右节点。
对于一棵完全二叉树,为了便于计算和记忆,我们需要申请一个内存空间是树的元素数量+1的内存地址,比如需要建一个10个元素的树,则需要申请11个长度的内存空间。将树的根节点存储在下标为1的位置,浪费下标为0的位置,便于寻找时少做一次算数运算。
因此,数组下标为1的位置存储根节点,推断就是对于下标 i,下标 2*i 的位置存储左子节点,下标 2*i + 1 存储右子节点,i/2 存储父节点。
借王争老师的图,比如完全二叉树
存储过程就是下标为1的位置存储根节点A,那根据公式 2*i = 2*1 = 2 的位置存储左子节点B,2*i + 1 = 2*1 +1 = 3 的位置存储右子节点C,根据下标依次推断即可。遍历的话就简单了,只需要知道根节点位置,而根节点一般选择下标1,都是明确的位置。
一、首先,简单介绍一下什么是“二叉树”
(1)当n=0时,为空树;
(2)当n=1时,只有一个结点,该节点称为根结点;
(3)当n>1时,除了根结点外的其他节点可分为互不相交的两个子集,称为左右子树,且左右子树本质上也都是二叉树。
图1 二叉树
(1)非空二叉树的第i层最多有2∧(i-1)个结点;
(2)深度为k的二叉树最多有2∧k-1个结点
二叉树是非线性的结构,其每个结点最多有一个“前驱”,但可以有多个“后继”。它可以***用顺序存储结构和链式存储结构。
到此,以上就是小编对于层次遍历c语言的问题就介绍到这了,希望介绍关于层次遍历c语言的3点解答对大家有用。