博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树
阅读量:6088 次
发布时间:2019-06-20

本文共 1599 字,大约阅读时间需要 5 分钟。

二叉树:二叉树是每个节点最多只有两个子节点的树,且子节点有左右之分。

满二叉树:一棵深度为k,且有2^k-1个节点的二叉树称为满二叉树。
完全二叉树:二叉树中,每个节点的序号都与相同的深度满二叉树序号完全一致,称为完全二叉树。
二叉树的遍历:二叉树的遍历通常有三种主要的方法,前序遍历、中序遍历和后序遍历,三种方法都是递归实现的。
1. 前序遍历
访问根节点
遍历左子树
遍历右子树
2. 中序遍历
遍历左子树
访问根节点
遍历右子树
3. 后序遍历
遍历左子树
遍历右子树
访问根节点
二叉树例子如下:
完整代码如下:

#include 
#include
struct node { int data; struct node *left; struct node *right;};int tree_nodes[] = { 'A', 'B', 'D', '#', '#', '#', 'C', 'E', '#', 'G', '#', '#', 'F', 'H', '#', '#', 'J', '#', '#'};int node_index = 0;void tree_destroy(struct node *leaf){ if (leaf != NULL) { tree_destroy(leaf->left); tree_destroy(leaf->right); free(leaf); }}void tree_create(struct node **leaf){ if (tree_nodes[node_index] == '#') { *leaf = NULL; node_index++; } else { *leaf = (struct node *)malloc(sizeof(struct node)); (*leaf)->data = tree_nodes[node_index++]; tree_create(&(*leaf)->left); tree_create(&(*leaf)->right); }}void preorder(struct node *root){ if (root != NULL) { printf("%5c", root->data); preorder(root->left); preorder(root->right); }}void inorder(struct node *root){ if (root != NULL) { inorder(root->left); printf("%5c", root->data); inorder(root->right); }}void postorder(struct node *root){ if (root != NULL) { postorder(root->left); postorder(root->right); printf("%5c", root->data); }}int main(void){ struct node *root; tree_create(&root); preorder(root); printf("\n"); inorder(root); printf("\n"); postorder(root); printf("\n"); tree_destroy(root); return 0;}

二叉树的创建使用了前序遍历方式创建的,其中使用了'#'字符,如果遇见该符号,表示子节点为空。

前序遍历、中序遍历和后序遍历结果为:

    A    B    D    C    E    G    F    H    J

    D    B    A    E    G    C    H    F    J
    D    B    G    E    H    J    F    C    A

 

你可能感兴趣的文章
Redis学习记录初篇
查看>>
爬虫案例若干-爬取CSDN博文,糗事百科段子以及淘宝的图片
查看>>
Web实时通信技术
查看>>
第三章 计算机及服务器硬件组成结合企业运维场景 总结
查看>>
IntelliJ IDEA解决Tomcal启动报错
查看>>
默认虚拟主机设置
查看>>
php中的短标签 太坑人了
查看>>
[译] 可维护的 ETL:使管道更容易支持和扩展的技巧
查看>>
### 继承 ###
查看>>
数组扩展方法之求和
查看>>
astah-professional-7_2_0安装
查看>>
函数是对象-有属性有方法
查看>>
uva 10107 - What is the Median?
查看>>
Linux下基本栈溢出攻击【转】
查看>>
c# 连等算式都在做什么
查看>>
使用c:forEach 控制5个换行
查看>>
java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试...
查看>>
使用ansible工具部署ceph
查看>>
linux系列博文---->深入理解linux启动运行原理(一)
查看>>
Android反编译(一) 之反编译JAVA源码
查看>>