当前位置:首页 > 经验 >

二叉树和红黑树(二叉树和树的关系)

来源:原点资讯(www.yd166.com)时间:2022-11-14 14:17:23作者:YD166手机阅读>>

红黑树在工程中的使用,红黑树是平衡树的一种。

1. 红黑树顺序的功能

2. 快速查找的功能

1.二叉树插入

二叉树和红黑树,二叉树和树的关系(1)

1. 如果比当前根节点大,就插到右子树

2. 如果比当前根节点小,就插到左子树

3. 再与根节点的子树去比较,决定插入到左子树,还是右子树。

一直到左右子树为空的情况。注意:二叉树的插入,只能作为叶子节点。

代码中的tmp指向的是node的父节点。下图的根节点是tmp指向的,node是指向根节点的子节点。

//二叉树创建节点,一般是不对外开放 struct bstree_node *bstree_create_node(KEY_VALUE key) { struct bstree_node *node = (struct bstree_node *)malloc(sizeof(struct bstree_node)); if(node == null) return null; node->data = key; node->bst.left = node->bst.right = null; return node; } //二叉树插入 int bstree_insert(struct bstree *T,KEY_VALUE key) { if(T == null) return -1; //如果根节点为空,就创建一个树 if(T->root == NULL) { T->root = bstree_create_node(key); return 0; } //接替根节点 //指向父节点的子节点 struct bstree_node *node = T->root; //指向父节点 struct bstree_node *tmp = T->root; //把一个值插入到相应的位置 //这个while循环就相当于,一个查找的过程 while(node != NULL) { //第一次,父节点和子节点指向的同一个位置 tmp = node; //如果要插入的值,小于当前节点的值,插入左子树 if(key < node->data) { node = node->bst.left; }else if(key > node->data){ //如果要插入的值,大于当前节点的值,插入右子树 node = node->bst.right; }else{ //如果相同节点,不插入,直接返回,提示有个相同节点 printf("exit!!!\n"); return -2; } } //当这个循环走完,终于找到要插入的位置 if(key < tmp->data) { //插入左边的叶子节点 tmp->bst.left = bstree_create_node(key); }else{ //插入右边的叶子节点 tmp->bst.rignt = bstree_create_node(key); } return 0; } //二叉树traversal:遍历 //如果不用递归实现遍历,就需要借助栈的方式 int bstree_traversal(struct bstree_node *node) { if(node == null) return 0; //左中右,中序遍历 bstree_traversal(node->bst.left); printf("M",node->data); bstree_traversal(node->bst.right); } //二叉树的测试和遍历的代码 int main() { int keyArray[ARRAY_LENGTH] = {24,25,13,35,23, 26,67,47,38,98, 20,13,17,49,12, 21,9,18,14,15}; struct bstree T = {0}; int i = 0; for (i = 0;i < ARRAY_LENGTH;i ) { bstree_insert(&T, keyArray[i]); } bstree_traversal(T.root); printf("\n"); }

二叉树和红黑树,二叉树和树的关系(2)

tmp指针,node指针,一直在往下移动。为什么这样呢?因为二叉树没有回溯,没有办法返回上一层,找不到父节点。所以这里必须用两个指针。

二叉树和红黑树,二叉树和树的关系(3)

当代码中的循环走完的时候,node指向空。

二叉树和红黑树,二叉树和树的关系(4)

栏目热文

为什么用红黑树而不是二叉树(红黑树和二叉树优缺点)

为什么用红黑树而不是二叉树(红黑树和二叉树优缺点)

上两节,我们依次讲了树、二叉树、二叉查找树。二叉查找树是最常用的一种二叉树,它支持快速插入、删除、查找操作,各个操作的时...

2022-11-14 14:26:38查看全文 >>

通俗讲红黑二叉树原理(红黑树为什么是平衡二叉树)

通俗讲红黑二叉树原理(红黑树为什么是平衡二叉树)

【51CTO.com原创稿件】 学过数据结构都知道二叉树的概念,而又有多种比较常见的二叉树类型,比如完全二叉树、满二叉树...

2022-11-14 14:42:53查看全文 >>

红黑树和平衡二叉树区别(详解什么是平衡二叉树)

红黑树和平衡二叉树区别(详解什么是平衡二叉树)

一,AVL树(平衡二叉树)(1)简介AVL树是带有平衡条件的二叉查找树,一般是用平衡因子差值判断是否平衡并通过旋转来实现...

2022-11-14 14:23:26查看全文 >>

红黑树结构优缺点(红黑树解决什么问题)

红黑树结构优缺点(红黑树解决什么问题)

1. 红黑树的概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过...

2022-11-14 14:35:35查看全文 >>

红黑树解决了什么问题(红黑树解决冲突)

红黑树解决了什么问题(红黑树解决冲突)

来源公众号:苦逼的码农作者:帅地红黑树算是很难的一种数据结构吧,一般很少考察插入、删除等具体操作步骤,如果遇到要你手写红...

2022-11-14 14:11:08查看全文 >>

红黑树为什么叫平衡二叉树(详解什么是平衡二叉树)

红黑树为什么叫平衡二叉树(详解什么是平衡二叉树)

前言面试过程中,多多少少会问一点数据结构(二叉树)的问题,今天我们来复习一下二叉树的相关问题,文末总结。1. 二叉树的由...

2022-11-14 14:52:59查看全文 >>

红黑树和平衡二叉树的优缺点(红黑树为什么是平衡二叉树)

红黑树和平衡二叉树的优缺点(红黑树为什么是平衡二叉树)

1 引言预防针:红黑树本来就是基本算法中的难点,所以看此文时建议先有点预备心理或知识铺垫,没接触过RBT而直接看此文的话...

2022-11-14 14:09:12查看全文 >>

红黑树与b+树区别(红黑树解决什么问题)

红黑树与b+树区别(红黑树解决什么问题)

树的定义树是包含n(n>1)个结点,n-1条边的有穷集,其中:(1)每个元素称为结点;(2)有一个特定的结点称为根...

2022-11-14 14:55:20查看全文 >>

红黑树的高度和深度区别(红黑树的原理动态图)

红黑树的高度和深度区别(红黑树的原理动态图)

专注于Java领域优质技术,欢迎关注作者:JasonGaoH之前在公司组内分享了红黑树的工作原理,今天把它整理下发出来,...

2022-11-14 14:34:32查看全文 >>

红黑树二叉树的区别(红黑树和平衡二叉树区别)

红黑树二叉树的区别(红黑树和平衡二叉树区别)

很早之前就想写一篇关于红黑树的文章,但是由于担心自己理解的不透彻,就一直不敢下笔。于是在重新看了很多篇文章和资料之后,决...

2022-11-14 14:11:33查看全文 >>

文档排行