zoukankan      html  css  js  c++  java
  • 数据结构4

    一、专业术语:

    1. 节点	
    
    2. 父节点	
    
    3. 子节点
    
    4. 子孙	
    
    5. 堂兄弟、亲兄弟
    
    6. 深度:从根节点到最底层节点的层数,为深度。
    
    7. 叶子节点:没有子节点的节点就叫做叶子节点。
    
    8. 非终端节点 == 非叶子节点
    
    9. 度:子节点的个数。
    
    

    二、树的分类

    2.1 一般树

    任意一个节点的子节点个数都不受限制。
    

    2.2 二叉树

    任意一个节点的子节点最多两个,且子节点树不可更改。
    
    分类:
    
    1. 一般二叉树
    
    2. 满二叉树:在不增加层数的前提下,不能再增加一个节点的树。
    
    3. 完全二叉树:如果只删除了满二叉树的最底层最右边连续的若干个(可以是0个)节点所形成的树。
    

    2.3 森林

    n个互不相交的树的集合。
    

    三、树存储

    1、二叉树的存储:
    
    	1.1 连续存储[完全二叉树]
    		优点:查找某个节点的父节点和子节点(也包括判断有没有子节点)的速度很快。
    		缺点:非常耗内存。
    
    	1.2 链式存储
    		三个指针域:parent,left,right。
    
    2、一般树存储
    	2.1 双亲表示法
    	2.2 孩子表示法
    	2.3 双亲孩子表示法
    	2.4 二叉树表示法:左指针域指向左边的第一个孩子节点,右指针域指向亲兄弟
    
    
    3、森林存储:也是转换为二叉树存储。
    

    四、二叉树的操作

    练习题

    五、二叉树先序遍历程序

    //
    //  main.c
    //  链式二叉树
    //
    //  Created by zhengbing on 2017/5/3.
    //  Copyright © 2017年 zhengbing. All rights reserved.
    //
    
    #include <stdio.h>
    #include <stdlib.h>
    
    struct TNode {
        char data;
        struct TNode * left;
        struct TNode * right;
    };
    
    struct TNode * creatNode(void); // 创建树
    void preTraverse(struct TNode * pRoot); // 先序遍历
    
    int main(int argc, const char * argv[]) {
    
        struct TNode * pRoot = creatNode();
        preTraverse(pRoot);
        return 0;
    }
    
    void preTraverse(struct TNode * pRoot){
    
        if (pRoot != NULL) {
            printf("%c 
    ", pRoot->data);
            preTraverse(pRoot->left);
            preTraverse(pRoot->right);
        }
    }
    
    struct TNode * creatNode(void){
    
        struct TNode *pA = (struct TNode *)malloc(sizeof(struct TNode));
        struct TNode *pB = (struct TNode *)malloc(sizeof(struct TNode));
        struct TNode *pC = (struct TNode *)malloc(sizeof(struct TNode));
        struct TNode *pD = (struct TNode *)malloc(sizeof(struct TNode));
        struct TNode *pE = (struct TNode *)malloc(sizeof(struct TNode));
        struct TNode *pF = (struct TNode *)malloc(sizeof(struct TNode));
        struct TNode *pG = (struct TNode *)malloc(sizeof(struct TNode));
    
        pA->data = 'A';
        pB->data = 'B';
        pC->data = 'C';
        pD->data = 'D';
        pE->data = 'E';
        pF->data = 'F';
        pG->data = 'G';
    
        pA->left = pB;
        pA->right = pC;
    
        pB->left = pD;
        pB->right = pF;
    
        pC->left = pC->right = NULL;
    
        pD->left = NULL;
        pD->right = pE;
    
        pE->left = pE->right = NULL;
    
        pF->left = pG;
        pF->right = NULL;
    
        pG->left = pG->right = NULL;
    
        return pA;
    }
    
    
    
  • 相关阅读:
    聊聊WS-Federation
    用双十一的故事串起碎片的网络协议(上)
    责任链模式的使用-Netty ChannelPipeline和Mina IoFilterChain分析
    最小化局部边际的合并聚类算法(中篇)
    最小化局部边际的合并聚类算法(上篇)
    UVaLive 7371 Triangle (水题,判矩形)
    UVaLive 7372 Excellence (水题,贪心)
    POJ 3312 Mahershalalhashbaz, Nebuchadnezzar, and Billy Bob Benjamin Go to the Regionals (水题,贪心)
    UVa 1252 Twenty Questions (状压DP+记忆化搜索)
    UVa 10817 Headmaster's Headache (状压DP+记忆化搜索)
  • 原文地址:https://www.cnblogs.com/markbin/p/6799970.html
Copyright © 2011-2022 走看看