经典的二叉树问题

本文介绍了一种使用C语言实现二叉树的方法。通过读取文本文件中的整数,将其插入到二叉树中,并确保每个节点的值都不小于其左子树中的任何值,同时右子树中的值都大于该节点的值。文章提供了完整的源代码,包括节点的插入、删除以及树的打印等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  二叉树问题也是非常经典的一类问题,与链表这种用非连续存储空间来进行数据存储的线性结构类似,二叉树也是用一组不连续的存储空间来存储同一类型的元素,并用指针将这些存储空间连接起来,每个存储空间称为树上的一个节点,与之不同的是二叉树的指针表示节点之间的父子关系,形成一种非线性的数据存储结构。它看起来像一棵倒立的树,二叉树可以用来存储任何类型的元素,每个节点存储一个元素的值,并且有两个指针,左指针和右指针。每个节点最多有两个节点,左指针指向的为左子节点,右指针指向的为右子节点。

  接下来看一下如何建立一个二叉树吧,举个例子:从一个文本文件中读入一组整数,用一棵二叉树来存储这些整数,读入的第一个整数存储在根节点root上。以后每读一个整数时,向root代表的二叉树上插入一个新的节点,存储所读入的整数。在最终的二叉树上,任取一个节点A:A的值不小于它的左子树上的任何值,它的有字数上每个数得知都大于A的值。

#include <stdio.h>

#include <stdlib.h>


Struct TreeNode{
int val;
TreeNode *left,*right;
};
TreeNode *insertTree(TreeNode *root,int val){
TreeNode *NewRode;
if (root==NULL){
NewRode=new TreeNode;
newNode→­­­­­­­­val=val;
newNode→left=Null;
newNode→right=Null;
return (newNode)
}
if (val<=root→val)
riit→left=insertTree (root→left,val);
else
rootvright=insertTree(root→right,val);


return (root);
}
void delTree (TreeNode *root){
if (root→left!=Null) delTree (root→left);
if (root→righteft!=Null) delTree (root→right);
delete root;
return;
}

void printTree (TreeNode *root,char offset[]){

char str [81];

printf ("%s%d\n",offset,root→val);

sprintf (str,"%s%s",offset,"");

if (root→left!=NULL)

printfTree(root→left,str);

else

printf ("%s$\n",str);

if (root→right!=NULL)

printfTree(root→right,str);

else 

printf ("%s$\n",str);

return ;

}

void  main()

{

FILE *fin;

TreeNode *root;

int val;

char str[81],inFile[30];

printf ("input the data file's name: ");

scanf ("%s",inFile);

fin=fopen(inFile,"r");

root=NULL;

while (fscanf (fin, "%d",&val)!=EOF) root=insertTree(root,val);

fclose (fin);

sprintf (str,"%s","");

printf (root,str);

delTree(root);

return;

}

通过以上代码,实现了建立二叉树的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值