#include<stdio.h>
#include<stdlib.h>
//二叉树的节点定义
typedef struct TreeNode
{
char ch; //数据域
struct TreeNode *lchild; //左孩子
struct TreeNode *rchild; //右孩子
}BTNode,*PBTNode;
//先序构造二叉树
void createBTree(PBTNode *root)
{
char ch;
ch=getchar();
if(ch=='#')
*root=NULL;
else{
*root=(PBTNode)malloc(sizeof(BTNode));
(*root)->ch=ch;
(*root)->lchild=NULL;
(*root)->rchild=NULL;
createBTree(&(*root)->lchild);
createBTree(&(*root)->rchild);
}
}
//先序遍历二叉树
void preOrder(PBTNode root)
{
if(root==NULL)
return;
printf("%-3c",root->ch);
preOrder(root->lchild);
preOrder(root->rchild);
}
//中序遍历二叉树
void inOrder(PBTNode root)
{
if(root==NULL)
return;
preOrder(root->lchild);
printf("%-3c",root->ch);
preOrder(root->rchild);
}
//后序遍历二叉树
void postOrder(PBTNode root)
{
if(root==NULL)
return;
preOrder(root->lchild);
preOrder(root->rchild);
printf("%-3c",root->ch);
}
//输出叶子结点
void displyLeaf(PBTNode root)
{
if(root==NULL)
return;
if(root->lchild==NULL&&root->rchild==NULL)
printf("%-3c",root->ch);
else{
displyLeaf(root->lchild);
displyLeaf(root->rchild);
}
}
//左结点插入
void inseartLeftNode(PBTNode root,char ch)
{
PBTNode p,newNode;
if(root==NULL)
return;
p=root->lchild;
newNode=(PBTNode)malloc(sizeof(BTNode));
newNode->ch=ch;
newNode->rchild=NULL;
newNode->lchild=p;
root->lchild=newNode;
}
//右结点插入
void inseartRightNode(PBTNode root,char ch)
{
PBTNode p,newNode;
if(root==NULL)
return;
p=root->rchild;
newNode=(PBTNode)malloc(sizeof(BTNode));
newNode->ch=ch;
newNode->lchild=NULL;
newNode->rchild=p;
root->rchild=newNode;
}
//销毁一颗二叉树
void clear(PBTNode* root)
{
PBTNode pl,pr;
if(*root==NULL)
return;
pl=(*root)->lchild;
pr=(*root)->rchild;
(*root)->lchild=NULL;
(*root)->rchild=NULL;
free((*root));
*root=NULL;
clear(&pl);
clear(&pr);
}
//删除左子树
void deleteLeftTree(PBTNode root)
{
if(root==NULL)
return;
clear(&root->lchild);
root->lchild=NULL;
}
//删除右子树
void deleteRightTree(PBTNode root)
{
if(root==NULL)
return;
clear(&root->rchild);
root->rchild=NULL;
}
//查找结点
PBTNode search(PBTNode root,char ch)
{
PBTNode p;
if(root==NULL)
return NULL;
if(root->ch==ch)
return root;
else{
if((p=search(root->lchild,ch))!=NULL)
return p;
else
return search(root->rchild,ch);
}
}
//求二叉树的高度
int BTreeHeight(PBTNode root)
{
int lchildHeight,rchildHeight;
if(root==NULL)
return 0;
lchildHeight=BTreeHeight(root->lchild);
rchildHeight=BTreeHeight(root->rchild);
return (lchildHeight>rchildHeight)?(1+lchildHeight):(1+rchildHeight);
}
//求叶子结点的个数
int countLeaf(PBTNode root)
{
if(root==NULL)
return 0;
if(root->lchild==NULL&&root->rchild==NULL)
return 1;
else{
return countLeaf(root->lchild)+countLeaf(root->rchild);
}
}
//求所有结点的个数
int countAll(PBTNode root)
{
if(root==NULL)
return 0;
return countAll(root->lchild)+countAll(root->rchild)+1;
}
//复制二叉树
PBTNode copyBTree(PBTNode root)
{
PBTNode p,lchild,rchild;
if(root==NULL)
return NULL;
lchild=copyBTree(root->lchild);
rchild=copyBTree(root->rchild);
p=(PBTNode)malloc(sizeof(BTNode));
p->ch=root->ch;
p->lchild=lchild;
p->rchild=rchild;
return p;
}
分享到:
相关推荐
以下是对二叉树及其C语言实现的详细说明。 首先,二叉树是由节点构成的,每个节点包含两个子节点,分别称为左子节点和右子节点。二叉树可以是空的,也可以由一个根节点和零个或多个子树组成。根据子节点的连接方式...
本压缩包包含的是基于C语言实现的二叉树基本操作,是学习和理解二叉树概念以及其实现的一个宝贵资源。 在C语言中,实现二叉树通常涉及定义一个结构体来表示节点,这个结构体至少包含两个指针,分别指向左右子节点,...
二叉树的基本操作** **a. 创建二叉树** 创建二叉树通常从创建根节点开始,然后根据需求插入新节点。插入操作分为创建新节点和连接新节点到已有节点两步。 ```c Node* createNode(int data) { Node* newNode = ...
三、C语言实现细节: 1. **动态内存分配**:在创建新节点时,使用`malloc()`函数为节点分配内存。记得在不再需要节点时使用`free()`释放内存,以防止内存泄漏。 2. **指针操作**:在插入或删除节点时,可能需要更新...
综上所述,"平衡二叉树的c语言实现"涉及到二叉树的基本概念、AVL树的平衡条件、插入和删除操作的实现、C语言中的数据结构和指针操作,以及性能优化等方面的知识。通过这个项目,开发者不仅可以掌握平衡二叉树的原理...
通过阅读本文,读者将能够全面理解二叉树的基本概念和原理,并掌握其在实际问题中的应用。 二叉树是一种特殊的树形结构,它满足以下特性: 每个节点最多有两个子节点。 子节点之间没有顺序关系,即左子节点和右子...
在本课程设计中,主要涉及了两个核心主题...通过以上步骤,可以完成课程设计的要求,实现二叉树的构造与操作,以及算术表达式的中缀到后缀转换和求值。这些技能对于理解和应用数据结构,特别是C语言编程来说至关重要。
以上就是C语言中二叉树基本操作的核心内容。通过创建节点、插入节点和进行前序遍历,我们可以对二叉树进行基本的操作和理解。这些概念是进一步学习二叉树的其他操作(如中序遍历、后序遍历、层次遍历等)的基础,也...
以上是C语言实现二叉树的基本操作,这些操作对于理解和应用二叉树数据结构至关重要。实际项目中,可能还需要添加其他功能,如插入节点、删除节点、查找节点等。熟悉这些基本操作能为解决更复杂的问题打下坚实的基础...
在这个“二叉树系统,C语言实现,数据结构课设”项目中,我们将探讨如何用C语言来实现二叉树的相关操作。C语言以其高效和灵活性,成为了实现这种底层数据结构的理想选择,尤其是对于学习数据结构和算法的初学者。 ...
### C语言实现二叉树的创建与遍历 在计算机科学中,二叉树是一种重要的数据结构,它具有丰富的应用场景,比如文件系统、编译器的设计等。本篇文章将详细介绍如何使用C语言来实现二叉树的基本操作:创建与遍历。 ##...
注意,为了正确地创建和遍历二叉树,还需要实现插入、删除等基本操作。这些操作同样基于对树结构的理解和对指针的灵活运用。 总的来说,二叉树遍历是数据结构和算法学习中不可或缺的一部分,熟练掌握其原理和C语言...
这个“经典二叉树的实现(C语言实现)”项目,显然是一个用于学习和实践二叉树概念的代码库。在Linux环境下,使用GCC编译器进行编译,这表明源代码可能包含头文件和.c文件,其中包含了二叉树的各种操作函数。 ...
本文将深入探讨二叉树的搜索和遍历方法,特别是使用C语言实现非递归策略。 二叉树由节点构成,每个节点包含一个值、一个左子节点和一个右子节点。根据节点的值,二叉树可以分为不同的类型,如二叉搜索树(BST),...
**二叉树实验报告——C语言实现** 在本次实验中,我们将探讨如何使用C语言来创建和操作二叉树。二叉树是一种重要的数据结构,它由节点组成,每个节点最多有两个子节点,通常分为左子节点和右子节点。在计算机科学中...
接下来,我们需要实现基本的二叉树操作,包括创建节点、插入节点、删除节点以及遍历二叉树。这些操作是通过递归或迭代的方式完成的。对于动态可视化打印,我们需要一种方式来按层次顺序打印节点,这可以通过层次遍历...
以上是二叉搜索树的基本操作的C语言实现,其中`b_search_tree.cpp`文件可能包含了这些功能的完整实现。学习和理解这些代码可以帮助你掌握二叉搜索树的基本概念和操作,为今后的数据结构和算法学习打下坚实基础。在...
根据给定的文件信息,我们可以总结出以下关于“使用C语言实现的数据结构中的二叉树”的相关知识点: ### 一、二叉树的基本定义及结构体设计 在本代码示例中,首先定义了二叉树节点的结构体 `BiTNode` 和二叉树类型...
总的来说,这个"二叉树算法集用C语言实现"的资源对于学习和理解二叉树的基本概念、遍历算法以及C语言编程实践都是非常有价值的。通过阅读和分析这些代码,开发者可以提升自己的数据结构和算法能力,更好地应对实际的...