zoukankan      html  css  js  c++  java
  • 二叉树的建立

    二叉树、

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

        二叉树可以用来存储任何类型的元素,每个结点存储一个元素的值,并有两个指针:左指针和右指针。两个结点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
    ", offset, root -> val);
    37     sprintf(str, "%s%s", offset, "   ");
    38     if(root -> Left != NULL)
    39         printTree(root -> Left, str);
    40     else
    41         printf("%s$
    ", str);
    42     if(root -> Right != NULL)
    43         printTree(root -> Right, str);
    44     else
    45         printf("%s$
    ", 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
  • 相关阅读:
    PAT:1075. PAT Judge (25) AC
    PAT:1010. 一元多项式求导 (25) AC
    PAT:1076. Forwards on Weibo (30) AC
    PAT:1086. Tree Traversals Again (25) AC
    PAT:1020. Tree Traversals (25) AC
    PAT:1051. Pop Sequence (25) AC
    PAT:1063. Set Similarity (25) AC
    PAT:1017. A除以B (20) AC
    C语言指针
    iOS block
  • 原文地址:https://www.cnblogs.com/xzrmdx/p/5168306.html
Copyright © 2011-2022 走看看