C语言建树
来源:互联网 发布:r语言和c语言 编辑:程序博客网 时间:2024/05/29 15:38
话不多说,先看代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>struct TreeNode{ //结构体用来储存树结点,包括节点的值data,分别指向左孩子右孩子的指针; int data; struct TreeNode *left, *right;};void SetTree(struct TreeNode **root, int val){//建树函数,传参为根节点的地址,新增数; struct TreeNode *t; //储存新结点; t=(struct TreeNode *)malloc(sizeof(struct TreeNode)); t->data=val; t->left=NULL; t->right=NULL; if((*root)==NULL){ //if根结点为空,把新增节点设为根结点; (*root)=t; return; } if((*root)->data>val) SetTree(&((*root)->left), val);//新增值小于该结点的值,放到左孩子,递归; else SetTree(&((*root)->right), val);//大于,右孩子,递归;}void ShowTree(struct TreeNode *root){ //打印函数; 中序遍历; if(root==NULL){ return; } //left; ShowTree(root->left); //root; printf("%d ",root->data); //right; ShowTree(root->right);}int main(){ int N; int val; struct TreeNode *root; root=NULL; scanf("%d",&N); while(N--){ scanf("%d",&val); SetTree(&root, val); } ShowTree(root); return 0;}
注意:上边代码,树的打印顺序是中序遍历;
有中则必有先后;
树的遍历有三种方法,前序遍历,中序遍历,后序遍历;
如上图
前序遍历(DLR)是先遍历根结点,然后遍历左子树,最后遍历右子树。
A B D G H E C K F I J;
中序遍历(LDR)是先遍历左子树,然后遍历根结点,最后遍历右子树。
G D H B E A C K F I J;
后序遍历(LRD)是先遍历左子树,然后遍历右子树,最后遍历根节点。
G H D E B K J I F C A;
其实代码很好写的,中序遍历就不再重复写了,下面写前序遍历和后序遍历;
前序遍历:
void DLRShowTree(struct TreeNode *root){ //打印函数; 前序遍历; if(root==NULL){ return; } //root; printf("%d ",root->data); //left; DLRShowTree(root->left); //right; DLRShowTree(root->right);}
后序遍历:
void LRDShowTree(struct TreeNode *root){ //打印函数; 后序遍历; if(root==NULL){ return; } //left; LRDShowTree(root->left); //right; LRDShowTree(root->right); //root; printf("%d ",root->data);}
阅读全文
0 0
- C语言建树
- BinaryTree-递归遍历&建树--C语言
- C/C++建树和遍历
- 建树
- C二叉树操作图解(建树,遍历,销毁)
- 递归建树
- 二叉排序树(建树)
- 指针建树
- C语言
- C语言
- C语言
- C语言
- C语言
- c语言
- C语言
- C语言
- C语言
- C语言
- caffe基础-04激活函数层的配置
- Matplotlib教程(详细版)前半部分
- 求强连通分量的Tarjan算法
- JSP 验证码详解
- Oracle关于处理小数点位数的几个函数,取小数位数,Oracle查询函数
- C语言建树
- Ubuntu 14.04安装RethinkDB 2.3.6
- 定义和调用TP的模板
- caffe基础-05全连接层的配置
- 最大公约数 与 异或 UVA GCD XOR 数论小技巧记录
- if语句 和switch语句
- js的程序设计思维
- spark streaming案例整理
- 580. Count Student Number in Departments