经典的二叉树问题

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

  接下来看一下如何建立一个二叉树吧,举个例子:从一个文本文件中读入一组整数,用一棵二叉树来存储这些整数,读入的第一个整数存储在根节点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;

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值