• 数据结构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;
    }
    
    
    
  • 相关阅读:
    休息一会。。。。。。
    iPhone开发之webview 拖动和显示本地图片的几组代码
    Android 防止手机休眠
    Android数据存储SQLite 事务操作
    解决png图片在IE6下的透明问题
    教你如何在博客园放“可运行"代码
    弹出层原理
    右键集成JS文件压缩 YUI Compressor
    原来window.event快达到全浏览器支持了
    QWrap入门指南
  • 原文地址:https://www.cnblogs.com/markbin/p/6799970.html
Copyright © 2020-2023  润新知