二叉树及其应用(增删改查)

本文介绍了二叉树的概念、性质、存储结构、遍历方式,重点讲解了二叉排序树(二叉查找树)的定义及编程实现,并提供了二叉树增删改查的C语言代码示例。
摘要由CSDN通过智能技术生成

一、树的概念

树(tree)是n(n>0)个结点的有限集.在任何一个非空树中

        1)有且仅有一个特定的称为根的结点

        2)当n>1时,其余结点可分为m个互不相交的有限集T1、T2,,,Tm

        其中每个集合本身也是一颗树,叫根的子树

树的结点包含一个数据元素以及若干个指向其子树的分支

结点的度:结点拥有的子树的数量,称之为结点的度。度为0的结点称之为叶子结点或者终端结点。

度不为0的结点,称之为分支结点或者非终端结点

结点的层次:从根开始定义起,根为第一层,根的孩子为第二层,树中结点的最大层次叫树的深度或者高度

二、二叉树

二叉树是一种树状结构,它的特点是每个结点最多只有两颗子树,也就是二叉树不存在度大于2的结点。

并且二叉树的子树有左右之分,不能随意颠倒次序

二叉树的五种形态

1、空二叉树(一个结点都没有的二叉树)

2、只有一个根结点的二叉树

3、只有左子树

4、只有右子树

5、完全二叉树

 

三、二叉树的性质

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

2、深度为K的二叉树最多有(2^k)-1个结点

3、对于任意一颗二叉树,如果其终端节点数为n0,度为2的结点为n2,则有n2=n0-1

        1)满二叉树:一颗深度为K且具有(2^K)-1个结点的二叉树,满二叉树

        2)完全二叉树:满足以下条件的二叉树

                a:除去最后一层为满二叉树

                b:最后一层的结点必须依次从左往右紧密排列

练习:结点数699的完全二叉树的叶子结点(终端结点)的数量为多少?

2^9-1=511

699-511=188

K=9+1=10层

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是二叉树增删改查的C语言代码示例。 首先,我们需要定义二叉树的结构体: ```c struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; }; ``` 接下来,我们分别实现二叉树的增、删、改、查操作: 1. 增加节点 ```c struct TreeNode* insertNode(struct TreeNode* root, int val) { if (!root) { struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode)); node->val = val; node->left = NULL; node->right = NULL; return node; } if (val < root->val) { root->left = insertNode(root->left, val); } else if (val > root->val) { root->right = insertNode(root->right, val); } return root; } ``` 2. 删除节点 ```c struct TreeNode* deleteNode(struct TreeNode* root, int key) { if (!root) { return NULL; } if (root->val == key) { if (!root->left) { struct TreeNode* tmp = root->right; free(root); return tmp; } else if (!root->right) { struct TreeNode* tmp = root->left; free(root); return tmp; } else { struct TreeNode* p = root->right; while (p->left) { p = p->left; } root->val = p->val; root->right = deleteNode(root->right, p->val); } } else if (root->val > key) { root->left = deleteNode(root->left, key); } else { root->right = deleteNode(root->right, key); } return root; } ``` 3. 修改节点 ```c struct TreeNode* modifyNode(struct TreeNode* root, int oldVal, int newVal) { root = deleteNode(root, oldVal); root = insertNode(root, newVal); return root; } ``` 4. 查找节点 ```c struct TreeNode* searchNode(struct TreeNode* root, int val) { if (!root || root->val == val) { return root; } if (root->val > val) { return searchNode(root->left, val); } else { return searchNode(root->right, val); } } ``` 以上就是二叉树增删改查的C语言代码示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值