`
Touch_2011
  • 浏览: 291494 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

二叉树的基本操作(C语言实现)

阅读更多
#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;
}

 

2
0
分享到:
评论

相关推荐

    二叉树的基本操作C语言实现

    以下是对二叉树及其C语言实现的详细说明。 首先,二叉树是由节点构成的,每个节点包含两个子节点,分别称为左子节点和右子节点。二叉树可以是空的,也可以由一个根节点和零个或多个子树组成。根据子节点的连接方式...

    二叉树-基于C语言实现的二叉树基本操作.zip

    本压缩包包含的是基于C语言实现的二叉树基本操作,是学习和理解二叉树概念以及其实现的一个宝贵资源。 在C语言中,实现二叉树通常涉及定义一个结构体来表示节点,这个结构体至少包含两个指针,分别指向左右子节点,...

    二叉树的实现 c语言版

    二叉树的基本操作** **a. 创建二叉树** 创建二叉树通常从创建根节点开始,然后根据需求插入新节点。插入操作分为创建新节点和连接新节点到已有节点两步。 ```c Node* createNode(int data) { Node* newNode = ...

    数据结构 二叉树的生成算法 C语言实现

    三、C语言实现细节: 1. **动态内存分配**:在创建新节点时,使用`malloc()`函数为节点分配内存。记得在不再需要节点时使用`free()`释放内存,以防止内存泄漏。 2. **指针操作**:在插入或删除节点时,可能需要更新...

    平衡二叉树的c语言实现

    综上所述,"平衡二叉树的c语言实现"涉及到二叉树的基本概念、AVL树的平衡条件、插入和删除操作的实现、C语言中的数据结构和指针操作,以及性能优化等方面的知识。通过这个项目,开发者不仅可以掌握平衡二叉树的原理...

    二叉树的基本操作c语言实现

    通过阅读本文,读者将能够全面理解二叉树的基本概念和原理,并掌握其在实际问题中的应用。 二叉树是一种特殊的树形结构,它满足以下特性: 每个节点最多有两个子节点。 子节点之间没有顺序关系,即左子节点和右子...

    c语言 实现二叉树操作 用栈实现算术表达式求值

    在本课程设计中,主要涉及了两个核心主题...通过以上步骤,可以完成课程设计的要求,实现二叉树的构造与操作,以及算术表达式的中缀到后缀转换和求值。这些技能对于理解和应用数据结构,特别是C语言编程来说至关重要。

    C语言二叉树基本操作

    以上就是C语言中二叉树基本操作的核心内容。通过创建节点、插入节点和进行前序遍历,我们可以对二叉树进行基本的操作和理解。这些概念是进一步学习二叉树的其他操作(如中序遍历、后序遍历、层次遍历等)的基础,也...

    C语言实现二叉树的各种操作。

    以上是C语言实现二叉树的基本操作,这些操作对于理解和应用二叉树数据结构至关重要。实际项目中,可能还需要添加其他功能,如插入节点、删除节点、查找节点等。熟悉这些基本操作能为解决更复杂的问题打下坚实的基础...

    二叉树系统,C语言实现,数据结构课设.rar

    在这个“二叉树系统,C语言实现,数据结构课设”项目中,我们将探讨如何用C语言来实现二叉树的相关操作。C语言以其高效和灵活性,成为了实现这种底层数据结构的理想选择,尤其是对于学习数据结构和算法的初学者。 ...

    C语言实现二叉树的创建遍历

    ### C语言实现二叉树的创建与遍历 在计算机科学中,二叉树是一种重要的数据结构,它具有丰富的应用场景,比如文件系统、编译器的设计等。本篇文章将详细介绍如何使用C语言来实现二叉树的基本操作:创建与遍历。 ##...

    二叉树遍历,c语言 实现数据结构二叉树遍历

    注意,为了正确地创建和遍历二叉树,还需要实现插入、删除等基本操作。这些操作同样基于对树结构的理解和对指针的灵活运用。 总的来说,二叉树遍历是数据结构和算法学习中不可或缺的一部分,熟练掌握其原理和C语言...

    经典二叉树的实现(c语言实现)

    这个“经典二叉树的实现(C语言实现)”项目,显然是一个用于学习和实践二叉树概念的代码库。在Linux环境下,使用GCC编译器进行编译,这表明源代码可能包含头文件和.c文件,其中包含了二叉树的各种操作函数。 ...

    二叉树 搜索 遍历 c语言

    本文将深入探讨二叉树的搜索和遍历方法,特别是使用C语言实现非递归策略。 二叉树由节点构成,每个节点包含一个值、一个左子节点和一个右子节点。根据节点的值,二叉树可以分为不同的类型,如二叉搜索树(BST),...

    二叉树实验报告 C语言

    **二叉树实验报告——C语言实现** 在本次实验中,我们将探讨如何使用C语言来创建和操作二叉树。二叉树是一种重要的数据结构,它由节点组成,每个节点最多有两个子节点,通常分为左子节点和右子节点。在计算机科学中...

    二叉树-基于C语言实现的二叉树动态可视化打印.zip

    接下来,我们需要实现基本的二叉树操作,包括创建节点、插入节点、删除节点以及遍历二叉树。这些操作是通过递归或迭代的方式完成的。对于动态可视化打印,我们需要一种方式来按层次顺序打印节点,这可以通过层次遍历...

    查找二叉树的c语言实现

    以上是二叉搜索树的基本操作的C语言实现,其中`b_search_tree.cpp`文件可能包含了这些功能的完整实现。学习和理解这些代码可以帮助你掌握二叉搜索树的基本概念和操作,为今后的数据结构和算法学习打下坚实基础。在...

    数据结构的二叉树用C语言实现的代码

    根据给定的文件信息,我们可以总结出以下关于“使用C语言实现的数据结构中的二叉树”的相关知识点: ### 一、二叉树的基本定义及结构体设计 在本代码示例中,首先定义了二叉树节点的结构体 `BiTNode` 和二叉树类型...

    二叉树算法集用c语言实现

    总的来说,这个"二叉树算法集用C语言实现"的资源对于学习和理解二叉树的基本概念、遍历算法以及C语言编程实践都是非常有价值的。通过阅读和分析这些代码,开发者可以提升自己的数据结构和算法能力,更好地应对实际的...

Global site tag (gtag.js) - Google Analytics