当前位置: 首页 > news >正文

织梦网站建设交流群/服务网站排名咨询

织梦网站建设交流群,服务网站排名咨询,做阿里云网站空间,长沙网站建设湘icp备文章目录二叉树的链式结构二叉树的遍历前序遍历(先根遍历)中序遍历(中根遍历)后序遍历(后根遍历)层序遍历二叉树的构建二叉树的节点数二叉树的叶子数二叉树的高度二叉树K层节点数查找值为X的节点判断二叉树…

文章目录

      • 二叉树的链式结构
        • 二叉树的遍历
          • 前序遍历(先根遍历)
          • 中序遍历(中根遍历)
          • 后序遍历(后根遍历)
          • 层序遍历
        • 二叉树的构建
        • 二叉树的节点数
        • 二叉树的叶子数
        • 二叉树的高度
        • 二叉树K层节点数
        • 查找值为X的节点
        • 判断二叉树是否为完全二叉树
        • 二叉树的销毁

二叉树的链式结构

  链式二叉树的增删查改是没有意义的,建立在二叉树基础上的搜索二叉树才具备增删查改的意义。但是链式二叉树是基础,就像修房子得先打地基一样。

二叉树的遍历

  首先确定一个概念,二叉树分为空树和非空树,只要是非空树就有根节点、根节点的左子树和根节点的右子树。二叉树的定义是递归式的。
  二叉树遍历是按照某种特定的规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作依次。访问节点所做的操作依赖于具体的应用问题,遍历是二叉树上最重要的运算之一,也是二叉树上进行其它运算的基础。
  二叉树一共有四种遍历方式,前序遍历(先根遍历)、中序遍历(中根遍历)、后序遍历(后根遍历)和层序遍历。

前序遍历(先根遍历)

  访问根节点的操作发生在遍历其左右子树之前。在遍历时,会不断向下遍历知道遇到空树才停止。
在这里插入图片描述

void PrevOrder(BTNode* root)
{if (NULL == root){printf("NULL ");return;}printf("%d ", root->data);PrevOrder(root->left);PrevOrder(root->right);
}

  栈帧空间的创建销毁顺序按照下图进行的,向右的箭头表示创建,向左的箭头表示销毁。创建销毁的顺序是橙色->绿色->深蓝色->粉色->金色->紫色->青色。
在这里插入图片描述

中序遍历(中根遍历)

  访问根节点的操作放生在遍历其左右子树之间。
在这里插入图片描述

void InOrder(BTNode* root)
{if (NULL == root){printf("NULL ");return;}InOrder(root->left);printf("%d ", root->data);InOrder(root->right);
}

  栈帧空间的创建销毁顺序按照下图进行的,向右的箭头表示创建,向左的箭头表示销毁。创建销毁的顺序是橙色->绿色->蓝色->粉色->深蓝色->金色->青色->紫色。
在这里插入图片描述

后序遍历(后根遍历)

  访问根节点的操作发生在遍历其左右子树之后。
在这里插入图片描述

void PostOrder(BTNode* root)
{if (NULL == root){printf("NULL ");return;}PostOrder(root->left);PostOrder(root->right);printf("%d ", root->data);
}

  栈帧空间的创建销毁顺序按照下图进行的,向右的箭头表示创建,向左的箭头表示销毁。创建销毁的顺序是橙色->绿色->蓝色->粉色->深蓝色->金色->青色->紫色。
在这里插入图片描述

层序遍历

  从第一层开始,每层从左到右,一层一层的走。四种遍历中,只有层序遍历是非递归的,它采用的是队列来实现的。
在这里插入图片描述

void LevelOrder(BTNode* root)
{Queue q;QueueInit(&q);// 先将根节点存入队列if (root)QueuePush(&q, root);// 判空,如果为空就不执行以下语句while (!QueueEmpty(&q)){// 获取队头,打印之后,移出队列BTNode* front = QueueFront(&q);printf("%d ", front->data);QueuePop(&q);if (front->left)QueuePush(&q, front->left);if (front->right)QueuePush(&q, front->right);}printf("\n");QueueDestroy(&q);
}

在这里插入图片描述

二叉树的构建

  二叉树的构建根据三种递归的遍历方式进行构建,可以进行前序、中序、后序构建,我这里使用的是前序构建。

BTNode* CreatBinaryTree(BTDataType* a, int* pi)
{if (-1 == a[*pi]){(*pi)++;return NULL;}BTNode* root = (BTNode*)malloc(sizeof(BTNode));if (NULL == root){perror("malloc fail");exit(-1);}root->data = a[(*pi)++];root->left = CreatBinaryTree(a, pi);root->right = CreatBinaryTree(a, pi);return root;
}

二叉树的节点数

int TreeSize(BTNode* root)
{if (NULL == root){return 0;}return TreeSize(root->left) + TreeSize(root->right) + 1;
}

  栈帧空间的创建销毁顺序按照下图进行的,向右的箭头表示创建,向左的箭头表示销毁。创建销毁的顺序是橙色->绿色->蓝色->粉色->深蓝色->金色->青色->紫色,最后返回的值是6。
在这里插入图片描述

二叉树的叶子数

int TreeLeafSize(BTNode* root)
{if (NULL == root){return 0;}if (NULL == root->left && NULL == root->right){return 1;}return TreeLeafSize(root->left) + TreeLeafSize(root->right);
}

  栈帧空间的创建销毁顺序按照下图进行的,向右的箭头表示创建,向左的箭头表示销毁。创建销毁的顺序是橙色->绿色->蓝色->粉色->深蓝色->金色,最后结果为3。
在这里插入图片描述

二叉树的高度

int TreeHeight(BTNode* root)
{if (NULL == root){return 0;}int left = TreeHeight(root->left);int right = TreeHeight(root->right);return  (left > right ? left : right) + 1;
}

  栈帧空间的创建销毁顺序按照下图进行的,向右的箭头表示创建,向左的箭头表示销毁。创建销毁的顺序是橙色->绿色->蓝色->粉色->深蓝色->金色,最后结果为3。
在这里插入图片描述

二叉树K层节点数

int TreeKLevelSize(BTNode* root, int k)
{if (NULL == root){return 0;}if (1 == k){return 1;}return TreeKLevelSize(root->left, k - 1) + TreeKLevelSize(root->right, k - 1);
}

  栈帧空间的创建销毁顺序按照下图进行的,向右的箭头表示创建,向左的箭头表示销毁。创建销毁的顺序是橙色->绿色->蓝色->粉色->深蓝色->金色,最后结果为3。
在这里插入图片描述

查找值为X的节点

BTNode* TreeFind(BTNode* root, BTDataType x)
{if (NULL == root)return NULL;if (x == root->data)return root;BTNode* ret1 = TreeFind(root->left, x);if (ret1)return ret1;BTNode* ret2 = TreeFind(root->right, x);if (ret2)return ret2;return NULL;
}

  栈帧空间的创建销毁顺序按照下图进行的,向右的箭头表示创建,向左的箭头表示销毁。创建销毁的顺序是橙色->绿色->蓝色->粉色->深蓝色->金色,最后结果为数字5节点的地址。
在这里插入图片描述

判断二叉树是否为完全二叉树

bool TreeComplete(BTNode* root)
{Queue q;QueueInit(&q);if (root)QueuePush(&q, root);// 若队列为空,则不执行while (!QueueEmpty(&q)){BTNode* front = QueueFront(&q);QueuePop(&q);// 判断front是否为空,为空则跳出循环if (!front){break;}else{QueuePush(&q, front->left);QueuePush(&q, front->right);}}// 若队列为空,则不执行while (!QueueEmpty(&q)){BTNode* front = QueueFront(&q);QueuePop(&q);if (front){QueueDestroy(&q);return false;}}QueueDestroy(&q);return true;
}

二叉树的销毁

// 二叉树销毁
void TreeDestory(BTNode* root)
{if (NULL == root){return;}TreeDestory(root->left);TreeDestory(root->right);free(root);
}
http://www.jmfq.cn/news/5210155.html

相关文章:

  • 网站地图制作怎么做/网站优化排名软件网
  • 网站做友情链接的用途/西安百度爱采购推广
  • 为什么做织梦网站时图片出不来/网络推广教程
  • 响应式网站建设品牌全网天下/seo快排优化
  • 静态网页怎么做网站/如何制作一个网页网站
  • mip织梦手机网站模板/客服外包平台
  • 营销活动网站/杭州seo优化
  • 什么专业可以做网站/seo怎么做优化方案
  • 芙蓉区网站建设/微商店铺怎么开通
  • 昆明企业自助建站系统/seo网站推广可以自己搞吗
  • 网站的整体规划怎么写/汤阴县seo快速排名有哪家好
  • 小米商城wordpress/毕节地seo
  • 做企业网站需要什么/最全磁力搜索引擎
  • 网站开发先做后台还是前台/百度老年搜索
  • 石家庄哪家网站做的好/2022小说排行榜百度风云榜
  • 网站建设seo网络推广/免费b站推广网站详情
  • tp做网站签到功能/网站备案查询工信部
  • 怎么用ppt做网站/济南做seo排名
  • 匈牙利网站后缀/郑州竞价托管代运营
  • 纯静态做企业网站/中小企业管理培训班
  • 漳州市网站建设公司/女装标题优化关键词
  • 酒店做爰视频网站/东莞网站推广优化网站
  • 宝塔wordpress建站教程/谈谈对seo的理解
  • 网站缓存优化怎么做/百度指数app官方下载
  • 建委 建设局 的官方网站/站长之家网站排行榜
  • 菏泽官方网站/牛奶软文广告营销
  • 私募网站建设/江门seo外包公司
  • 门户网站网站开发/优秀网站设计赏析
  • 天津规划设计公司/qq群怎么优化排名靠前
  • idea15网站开发/百度开发平台