4/6总结

文章介绍了树的数据结构,包括树的表示形式、结构特点、定义,以及森林、结点、子树等概念。二叉树作为树的特殊情形被详细阐述,包括其结点定义、性质,以及前序、中序、后序遍历的实现。此外,还提到了满二叉树和完全二叉树的特性。
摘要由CSDN通过智能技术生成

1、树的表示形式

5.1树型表示

5.2的(a)是嵌套集合,(b)是广义表形式,(c)凹入表示法

2、树的结构(非线性型)

1、节点之间有分支

2、具有层次关系

3、使用范围:

        自然界:树
        人类社会: 家谱、行政组织机构
        计算机领域:
        编译:用树表示源程序的语法结构
        数据库系统:用树组织信息
        算法分析:用树描述执行过程

 3、树的定义

树(Tree)是n(n>=0)个结点的有限集。n=0为空树

1、 有且仅有一个称之为根的节点

2、除了根节点以外的其余结点可分为m(m>0)个互不相交的有限集T1,T2,T3......Tm,其中每一个集合本身又是一棵树,并且称为根的子树

4、树的基本情况

1.森林:是m(m>=0)棵互不相交的树的集合 ` 注意树一定是森林,森林不一定是树
2.结点(node): 树的结点由数据元素及其若干分支组成
3.子树:以根结点为根的树为全树(或树),以其他结点作为根结点的树为子数
4.结点的度:该结点分支数量
5.树的度:树中所有结点的度的最大值
6.叶子结点(leaf node):无分支的结点
7.双亲结点、孩子结点:一个结点下的所有分支结点称为孩子结点,该结点成为他们的双亲结点。
8.兄弟结点:具有共同的双亲
9.堂兄弟:在同一层,具有公共祖先
10.树的深度、高度:深度:根节点从0开始计算,高度:最底层结点从0开始计算

二叉树(二叉树不是一种特殊的树,而是树的特殊情形)

1. 二叉树的结点定义

typedef struct Node{
    char data;                    /*数据域*/
    struct Node *lchild, *rchild; /*左子树和右子树*/
} * BiTree, BiNode;

2、二叉树的性质

1、在二叉树的第i层上至多有2的i-1次方个结点(i>=1)

2、深度为k的二叉树至多有2的k-1次方个结点

3、对于任何一颗二叉树,度为2的结点数=叶子数-1

3、二叉树的创建和遍历以及测试方式

typedef struct Node{
	char val;                    /*数据域*/
	struct Node *lchild, *rchild; /*左子树和右子树*/
} * BiTree, BiNode;


void CreateBiTree(BiTree *T)
{
    char ch;
    ch=gerchar();
    if (ch == '#')
        T = NULL;
    else
    {
        T = (BiTree *)malloc(sizeof(BiTree)); /*创建一个新节点*/
        T->data = ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
    /*递归创建*/
}


// 前序遍历
void preOrder(BiTree* root) {
    if (root == NULL) {
        return;
    }
    printf("%d ", root->val);
    preOrder(root->left);
    preOrder(root->right);
}


// 中序遍历
void inOrder(BiTree* root) {
    if (root == NULL) {
        return;
    }
    inOrder(root->left);
    printf("%d ", root->val);
    inOrder(root->right);
}


// 后序遍历
void postOrder(BiTree* root) {
    if (root == NULL) {
        return;
    }
    postOrder(root->left);
    postOrder(root->right);
    printf("%d ", root->val);
}


// 主函数
int main() {
    TreeNode* root = createTree();
    printf("前序遍历结果:");
    preOrder(root);
    printf("\n中序遍历结果:");
    inOrder(root);
    printf("\n后序遍历结果:");
    postOrder(root);
    printf("\n");
    return 0;
}

二叉树的特殊情形

1、满二叉树:

如果二叉树中除了叶子结点,每个结点的度都为 2,则此二叉树称为满二叉树。

2、完全二叉树

如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二叉树被称为完全二叉树。

3、完全二叉树的性质

1)叶节点只可能在最下两层
2)最下层的叶子一定集中在左部连续位置
3)结点度为 1,则该结点只有左孩子。
4)倒数第二层,如果有叶节点,则一定位于右部连续位置。
5)相同结点的二叉树,完全二叉树的深度最小

二叉树的相关内容

B树、B+树、B-树
红黑树
线段树
哈夫曼树
BST树、BBST树

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值