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

408之二叉树(一)

       今天学习了二叉树的层次建树和深度优先遍历算法,现在将实现的代码分享如下:

1. 二叉树结构定义

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>// 二叉树节点定义
typedef char bielemtype;
typedef struct bitree
{bielemtype data;               // 节点数据域struct bitree* lchild, * rchild; // 左右子节点指针
}bitree, * pbitree;// 辅助队列节点定义(用于层次建树)
typedef struct tag
{pbitree p;                    // 指向二叉树节点struct tag* next;             // 队列下一个节点指针
}tag, * ptag;

2. 二叉树遍历实现

// 前序遍历:根->左->右
void preorder(pbitree tree)
{if (tree != NULL){printf("%c", tree->data);  // 先访问根节点preorder(tree->lchild);    // 递归遍历左子树preorder(tree->rchild);    // 递归遍历右子树}
}// 中序遍历:左->根->右
void midorder(pbitree tree)
{if (tree != NULL){midorder(tree->lchild);    // 递归遍历左子树printf("%c", tree->data);  // 访问根节点midorder(tree->rchild);    // 递归遍历右子树}
}// 后序遍历:左->右->根
void postorder(pbitree tree)
{if (tree != NULL){postorder(tree->lchild);   // 递归遍历左子树postorder(tree->rchild);   // 递归遍历右子树printf("%c", tree->data);  // 最后访问根节点}
}

3. 二叉树层次建树实现

// 二叉树层次建树主函数
int main()
{pbitree pnew;                  // 新创建的二叉树节点bielemtype c;                  // 读取的输入字符pbitree tree = NULL;           // 二叉树根节点// 辅助队列指针(用于层次建树)ptag head = NULL, tail = NULL; // 队列头尾指针ptag pcur = NULL;              // 当前处理的队列节点ptag list_pnew = NULL;         // 新创建的队列节点while (scanf("%c", &c))        // 循环读取输入字符{if (c == '\n')             // 遇到换行符结束输入{break;}// 创建新二叉树节点pnew = (pbitree)calloc(1, sizeof(bitree));pnew->data = c;// 创建对应的队列节点list_pnew = (ptag)calloc(1, sizeof(tag));list_pnew->p = pnew;// 处理第一个节点(根节点)if (tree == NULL){tree = pnew;           // 设置根节点head = list_pnew;      // 初始化队列tail = list_pnew;pcur = list_pnew;continue;}else{tail->next = list_pnew; // 新节点加入队列尾部tail = list_pnew;}// 将新节点挂载到当前处理的父节点if (pcur->p->lchild == NULL){pcur->p->lchild = pnew; // 挂载到左子树}else if (pcur->p->rchild == NULL){pcur->p->rchild = pnew; // 挂载到右子树pcur = pcur->next;      // 当前父节点已满,移动到队列下一个节点}}// 输出三种遍历结果preorder(tree);printf("\n");midorder(tree);printf("\n");postorder(tree);return 0;
}

http://www.dtcms.com/a/435522.html

相关文章:

  • 阳泉市住房保障和城乡建设管理局网站建设协会网站的公司
  • 【密码学实战】openHiTLS CRL命令行:证书吊销列表
  • 烟台网站建设方案报价国开行网站毕业申请怎么做
  • js中异步回调函数的执行机制与事件循环
  • 创造与魔法官方网站做自己喜欢的事购物商城起名
  • 自己搞网站建设企业网站更新什么内容
  • 解决一个C# 在Framework 4.5反序列化的问题
  • 营销导向网站建设流程电脑配件网站建设
  • 网站搭建素材群会计培训班的费用是多少
  • 建设银行短信带网站江苏省住房和城乡建设厅网站首页
  • 哪个网站最好wordpress找回密码收不到邮件
  • 哈希表(散列表)介绍及实现
  • 一个专门做ppt的网站吗注册域名需要实名认证吗
  • 做网站外包工作怎么样visual composer for wordpress
  • 平面设计鉴赏网站关于加强网站建设
  • Spring Boot 热部署配置
  • 成都网站设计公司南宁seo按天收费
  • 自适应微网站开发专业集团门户网站建设企业
  • PCIe协议之低功耗篇之 理论深度学习(三)
  • 广州帮人网站建设广州网站建设需要多少费用
  • 在县城怎么做网站公司网络域名侵权十大案例
  • 佛山专业做淘宝网站推广住房与城乡建设局网站
  • 康复实训室介绍:告别“假人”模型,在沉浸式环境中锻造康复精英的黄埔军校
  • C语言小白实现多功能计算器的艰难历程
  • 【C++实战(62)】从0到1:C++打造TCP网络通信实战指南
  • 企业网站建设杭州公司宠物寄养网站毕业设计
  • 同ip怎么做不同的网站网站设计需要什么技术
  • 邢台做wap网站的公司做旅行路线的网站
  • 港口备案怎么在网站做培训心得简短
  • 菏泽市住房和建设局网站专业建站公司电话咨询