二叉树的建立

二叉树、

    与链表类似,“二叉树”也是用一组不连续的存储空间来存储一组同类型的元素,并用指针将这些存储空间连接起来,每个存储空间被称作树上的一个结点。不同的是,二叉树的指针表示结点之间的”父——子“关系,从而形成一种非线性的数据存储结构。他看起来像一棵倒立的树。

    二叉树可以用来存储任何类型的元素,每个结点存储一个元素的值,并有两个指针:左指针和右指针。两个结点A和B,如果A有一个指针指向B,则将A称为B的“父结点”、B称作A的“子结点”。

相关概念、

 

*叶子结点:一个节点如果没有任何子结点,则将其称作一个叶子结点,或者简称叶子。

*根结点:一棵二叉树中有唯一的一个结点,不是其他任何节点的子结点,这个结点称作二叉树的根结点,或则简称根。根节点位于二叉树的最顶层;

*结点层数:根所在的层数为0,其他结点的层数是父结点所在的层数加1.

*二叉树的深度:叶子结点所在的最大层数称作树的深度。

*子树:假设B是A的子结点,从B出发能达到的全部结点构成一棵以B为根的树,称为A的一棵子树。如果B是A的左子结点,则该子树称为A的左子树。

二叉树的建立、

    从一个文本中读入一组数据,用一棵二叉树存储这些整数。读入的第一个整数存储在根节点上。以后美读入一个整数时,向root代表的二叉树上插入一个新的结点,存储所读入的整数。最终的二叉树上,任取一个结点A:A的值不小于它左子树上的任何值、它的右子树上的每个值都大于A的值。下面的程序演示了建立这样一棵二叉树的过程。

 

 

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 struct TreeNode { //二叉树结点的数据类型
 5     //数据域
 6     int val;
 7     //指针域
 8     TreeNode *Left, *Right;
 9 };
10 
11 TreeNode * insertTree(TreeNode * root, int val) { //想二叉树中添加新的节点
12     TreeNode * newNode;
13     if(root == NULL) {
14         newNode = new TreeNode;
15         newNode -> val = val;
16         newNode -> Left = NULL;
17         newNode -> Right = NULL;
18         return (newNode);
19     }
20     if(val <= root -> val)
21         root -> Left = insertTree(root -> Left, val);
22     else
23         root -> Right = insertTree(root -> Right, val);
24     return root;
25 }
26 
27 void delTree(TreeNode * root) { //删除二叉树占用的存储空间
28     if(root -> Left != NULL) delTree(root -> Left);
29     if(root -> Right != NULL) delTree(root -> Right);
30     delete root;
31     return;
32 }
33 
34 void printTree(TreeNode * root, char offset[]) { //输出二叉树的形状
35     char str[81];
36     printf("%s%d\n", offset, root -> val);
37     sprintf(str, "%s%s", offset, "   ");
38     if(root -> Left != NULL)
39         printTree(root -> Left, str);
40     else
41         printf("%s$\n", str);
42     if(root -> Right != NULL)
43         printTree(root -> Right, str);
44     else
45         printf("%s$\n", str);
46     return;
47 }
48 
49 int main()
50 {
51     FILE *fin;
52     TreeNode *root;
53     int val;
54     char str[81], inFile[30];
55     printf("input the data file's name: ");
56     scanf("%s", inFile);
57     fin = fopen(inFile, "r"); 
58     //从输入文件里读入数据,建立一棵二叉树
59     root = NULL;
60     while(fscanf(fin, "%d", &val) != EOF) root = insertTree(root, val);
61     fclose(fin); 
62     //查看建立二叉树的形状
63     sprintf(str, "%s", "");
64     printTree(root, str); 
65     //删除所建立的二叉树
66     delTree(root);
67     return 0;
68 }
View Code

 

 

可用此代码生成文本文件

 1 #include<stdio.h>
 2 
 3 int main()
 4 {
 5     FILE *fp;
 6     int n, a[100];
 7     scanf("%d", &n);
 8     for(int i = 0; i < n; i++) {
 9         scanf("%d", &a[i]);
10     }
11     fp = fopen("f:\\wakawaka", "wb");
12     for(int i = 0; i < n; i++) {
13         fprintf(fp, "%d ", a[i]);
14     }
15     fclose(fp);
16     return 0;
17 }
View Code

 

 

posted @ 2016-01-29 11:01  lemadmax  阅读(514)  评论(0编辑  收藏  举报