二叉树和红黑树,二叉树和树的关系

首页 > 经验 > 作者:YD1662022-11-14 14:17:23

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

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)

首页 12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.