线性表(不管是顺序存储还是链式存储)的元素之间的逻辑关系是线性的,这有时候并不能满足实际的要求,树形结构是另一种数据结构,它的元素之间的逻辑关系画成图的话形似一颗倒挂的树,故而得名。二叉树是树形结构中的特例,每个结点最多有两个孩子,就好像处于计划生育年代一样。
下面就是二叉树的一些基本操作,程序是用c语言写的。
#include <stdio.h>
#include <stdlib.h>
typedef struct _Node {
int data;
struct _Node *lchild, *rchild;
} Node, *Pnode;
Pnode CreateBT();
void Preorder(Pnode);
void Inorder(Pnode);
void Postorder(Pnode);
void ShowTree(Pnode, int);
int LeafNum(Pnode);
int NodeNum(Pnode);
int main()
{
Pnode head = NULL;
int x = 0;
printf("二叉树\n");
do {
printf("*************************\n");
if (head) {
printf("(二叉树已存在!)\n");
} else {
printf("(二叉树还未创建!)\n");
}
printf("* 请选择要执行的操作:\n");
printf("* [1] 创建二叉树\n");
printf("* [2] 先序遍历\n");
printf("* [3] 中序遍历\n");
printf("* [4] 后续遍历\n");
printf("* [5] 显示二叉树\n");
printf("* [6] 显示叶子数\n");
printf("* [7] 显示二叉树的结点数\n");
printf("* [9] 退出\n");
printf("*************************\n");
printf("你的选择:");
scanf("%d", &x);
switch (x) {
case 1:
printf("请输入根结点\n");
head = CreateBT();
break;
case 2:
Preorder(head);
printf("\n");
break;
case 3:
Inorder(head);
printf("\n");
break;
case 4:
Postorder(head);
printf("\n");
break;
case 5:
ShowTree(head, 1);
break;
case 6:
printf("叶子数是%d\n", LeafNum(head));
break;
case 7:
printf("结点数是%d\n", NodeNum(head));
break;
default:
break;
}
} while (x != 9);
printf("bye!\n");
return 0;
}
Pnode CreateBT() {
Pnode t = NULL;
int iput = 0;
scanf("%d", &iput);
if (iput==0) {
t = NULL;
} else {
t = (Pnode)malloc(sizeof(Node));
t->data = iput;
printf("请输入%d的左孩子\n", iput);
t->lchild = CreateBT();
printf("请输入%d的右孩子\n", iput);
t->rchild = CreateBT();
}
return t;
}
void Preorder(Pnode p) {
if (p) {
printf("%d ", p->data);
Preorder(p->lchild);
Preorder(p->rchild);
}
}
void Inorder(Pnode p) {
if (p) {
Inorder(p->lchild);
printf("%d ", p->data);
Inorder(p->rchild);
}
}
void Postorder(Pnode p) {
if (p) {
Postorder(p->lchild);
Postorder(p->rchild);
printf("%d ", p->data);
}
}
void ShowTree(Pnode p, int dep) {
if (p) {
for (int i = 0; i < dep; i++) {
printf(" ");
}
printf("%d**********\n", p->data);
ShowTree(p->lchild,dep+1);
ShowTree(p->rchild, dep+1);
}
}
int LeafNum(Pnode p) {
if ((!p->lchild) && (!p->rchild)) {
return 1;
} else if (!p->lchild) {
return LeafNum(p->rchild);
} else if (!p->rchild) {
return LeafNum(p->lchild);
} else {
return LeafNum(p->lchild)+LeafNum(p->rchild);
}
}
int NodeNum(Pnode p) {
if (!p) {
return 0;
}
return NodeNum(p->lchild) + NodeNum(p->rchild)+1;
}
分享到:
相关推荐
二叉树是一种在计算机科学中广泛应用的数据结构,它由节点(也称为结点)组成,每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树的深度是指从根节点到最远叶节点的最长路径上边的数目,即树的最大层数...
二叉树是一种特殊的树结构,每个节点最多只有两个子节点,通常分为左子节点和右子节点。在计算机科学中,二叉树被广泛应用于数据的组织和操作,如搜索、排序、文件系统等。本例子关注的是如何实现二叉树的图形显示,...
在计算机科学领域,二叉树是一种基础的数据结构,它由结点构成,每个结点最多有两个子节点,分别称为左子节点和右子节点。在众多的二叉树操作中,根据后序遍历序列(也称为后序序列)来构造二叉树是一项常见的任务。...
(2)先序、中序、后序遍历二叉树:递归算法。 (3)中序遍历二叉树:非递归算法(最好也能实现先序,后序非递归算法)。 (4)求二叉树的高度 。 (5)求二叉树的叶子个数。 (6)对于树中每一个元素值为x的结点...
- **答案解析**:如果一棵二叉树的中序遍历序列和后序遍历序列正好相反,那么该二叉树一定是任一结点都没有左孩子的二叉树。 #### 5. 二叉树的结点数范围 - **答案解析**:深度为k的二叉树最多有\(2^k - 1\)个结点...
在IT领域,特别是数据结构和算法的学习中,二叉树是一种重要的抽象数据类型。满二叉树是一种特殊的二叉树,其中每一层都是完全填充的,除了可能的最后一层,且最后一层的所有节点都尽可能地向左靠拢。而将满二叉树...
根据给定的信息,本文将详细介绍二叉树的基本概念及其在程序中的实现方法,包括二叉树的创建、遍历(前序、中序、后序)、复制、求高度、判断是否为完全二叉树以及利用二叉树进行表达式的计算等操作。 ### 一、...
### 构造二叉树与遍历二叉树 #### 一、二叉树的基本概念 二叉树(Binary Tree)是一种非线性数据结构,在计算机科学中被广泛应用于各种算法和程序设计中。一个二叉树由零个或多个节点组成,其中每个节点最多有两个子...
二叉树横向打印算法的实现 二叉树是一种基本的数据结构,在计算机科学和编程中广泛应用。本资源介绍了一种特殊的二叉树打印算法,即横向打印二叉树结构。该算法将二叉树的根节点放在屏幕的最左边,左子树在屏幕的...
### 知识点:复制一棵二叉树 #### 一、引言 在计算机科学领域,数据结构中的二叉树是一种常见的非线性数据结构,它由节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。复制二叉树是指创建一个与原...
### 二叉树的递归算法:建立与遍历 #### 一、二叉树的基本概念 二叉树是计算机科学中的一个重要数据结构,它是一种树形结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。在二叉树中,左子节点...
建立一棵二叉树,试编程实现二叉树的如下基本操作: 1. 按先序序列构造一棵二叉链表表示的二叉树T; 2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出结点的遍历序列; 3. 求二叉树的深度/结点数目...
1、 定义链接存储的二叉树类。 2、 实验验证如下算法的正确性、各种功能及指标: 1) 创建一棵二叉树,并对其初始化; 2)先根、中根、后根遍历二叉树; 3) 在二叉树中搜索给定结点的父结点; 4) 搜索二叉树中符合...
二叉树的建立与遍历 二叉树是一种重要的数据结构,它广泛应用于计算机科学和软件工程中。在这篇文章中,我们将讨论二叉树的建立和遍历,包括先序遍历、中序遍历和后序遍历。 一、数据结构的重要性 数据结构是...
1.二叉树的基本操作实现【问题描述】建立一棵二叉树,用递归方法实现二叉树的如下基本操作:(1)按先序序列构造一棵二叉链表表示的二叉树T;(2)对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出...
在探讨“求二叉树最大宽度”的数据结构问题时,我们深入分析了如何通过特定算法找到一棵二叉树中每一层节点的最大数量,这一过程涉及到了数据结构与算法设计的关键概念和技术。 ### 一、二叉树的概念 二叉树是一种...
二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py...
### 二叉树基本操作知识点解析 #### 一、实验目的 在本实验中,学习者将通过实际编程练习来加深对二叉树这一数据结构的理解,并熟练掌握其基本操作。具体目标包括: 1. **熟悉二叉树结点的结构和对二叉树的基本...
### 二叉树遍历实验报告知识点概览 #### 一、实验背景及目标 **实验背景:** 本次实验属于《数据结构》课程的一部分,旨在通过实际编程加深学生对二叉树这一数据结构的理解和应用能力。二叉树作为一种基本且重要的...