二叉查找树-插入的函数

在已知的二叉查找树中插入节点,当然插入后的节点会位于叶子上,如果插入的数据与原来就有的数据相同,那么就不插入,当然如果在树的结构中增加一个代表数据重复次数的成员或是另开一个数据结构保存重复次数。

主要函数如下:

 1 BTree *insertNode(BTree *root,int data)
 2 {
 3     BTree *tmp = nullptr;
 4     if (root == nullptr)
 5     {
 6         tmp = (BTree *)malloc(sizeof(BTree));
 7         tmp->data = data;
 8         tmp->left = nullptr;
 9         tmp->right = nullptr;
10         root = tmp;
11     }
12     else
13     {
14         if (data < root->data)
15         {
16             root->left = insertNode(root->left, data);
17         }
18         else if (data > root->data)
19         {
20             root->right = insertNode(root->right, data);
21         }
22     }
23     return root;
24 }

全部源代码如下,其余部分同上一篇:查找函数:的代码

  1 #include "iostream"
  2 #include "stdlib.h"
  3
  4 #define log(s); std::cout<<s;
  5
  6 typedef struct _btree_
  7 {
  8     int data;
  9     struct _btree_ *left;
 10     struct _btree_ *right;
 11 }BTree;
 12
 13 BTree *createNode(int data)
 14 {
 15     BTree *p = (BTree *)malloc(sizeof(BTree));
 16     p->data = data;
 17     p->left = nullptr;
 18     p->right = nullptr;
 19     return p;
 20 }
 21
 22 BTree *findKey(BTree *father,int data)
 23 {
 24     if (father->data < data)
 25         return findKey(father->right, data);
 26     else if (father->data>data)
 27         return findKey(father->left, data);
 28     else
 29         return father;
 30 }
 31
 32 BTree *findMax(BTree *root)
 33 {
 34     if (root != nullptr)
 35         while (root->right != nullptr)
 36             root = root->right;
 37     return root;
 38 }
 39
 40 BTree *findMin(BTree *root)
 41 {
 42     if (root->left == nullptr)
 43         return root;
 44     else
 45         return findMin(root->left);
 46 }
 47
 48 BTree *createTree(BTree *&root)
 49 {
 50     BTree *t1, *t2, *t4, *t3, *t6, *t7, *t8, *t9, *t10;
 51     t1 = createNode(1);
 52     t2 = createNode(9);
 53     t3 = createNode(7);
 54     t4 = createNode(5);
 55     t6 = createNode(15);
 56     t7 = createNode(11);
 57     t8 = createNode(16);
 58     t9 = createNode(12);
 59     t10 = createNode(17);
 60     root->left = t4;
 61     root->right = t6;
 62     t4->left = t1;
 63     t4->right = t2;
 64     t2->left = t3;
 65     t6->left = t7;
 66     t6->right = t8;
 67     t8->left = t9;
 68     t8->right = t10;
 69     return root;
 70 }
 71
 72 void showResult(BTree *node)
 73 {
 74     if (node == nullptr)
 75         return;
 76     std::cout << node->data << std::endl;
 77 }
 78
 79 BTree *insertNode(BTree *root,int data)
 80 {
 81     BTree *tmp = nullptr;
 82     if (root == nullptr)
 83     {
 84         tmp = (BTree *)malloc(sizeof(BTree));
 85         tmp->data = data;
 86         tmp->left = nullptr;
 87         tmp->right = nullptr;
 88         root = tmp;
 89     }
 90     else
 91     {
 92         if (data < root->data)
 93         {
 94             root->left = insertNode(root->left, data);
 95         }
 96         else if (data > root->data)
 97         {
 98             root->right = insertNode(root->right, data);
 99         }
100     }
101     return root;
102 }
103
104 int main(void)
105 {
106     BTree *root = nullptr;
107     root = createNode(10);
108     root = createTree(root);
109     root = insertNode(root,8);
110     system("pause");
111     return 0;
112 }

结果是这样的:

树的原结构如下:(用Word画的)

如果有错误之处希望读者能够指出,不胜感激。

以上。

时间: 2024-10-26 20:25:19

二叉查找树-插入的函数的相关文章

二叉查找树-删除的函数

数的构造同插入函数那篇文章的构造. 主要增加了查找父节点和删除的函数,同时为了方便删除了插入的函数. 获取父节点的函数如下: 1 BTree *getFather(BTree *root,BTree *child) 2 { 3 if (root == child) 4 return nullptr; 5 if (root->left == child || root->right == child) 6 return root; 7 if (root->data > child-&

二叉查找树(插入、查找、遍历、删除.........)

[二叉查找树的性质] 二叉查找树是满足以下条件的二叉树: 左子树上的所有节点值均小于根节点值 右子树上的所有节点值均不小于根节点值 左右子树也都是二叉查找树 不存在两个节点的值相等 [二叉查找树的插入.删除过程] 二叉查找树的插入过程如下: 1. 若当前的二叉查找树为空,则插入的元素为根节点 2. 若插入的元素值小于根节点值,则将元素插入到左子树中:若插入的元素值不小于根节点值,则将元素插入到右子树中. 二叉查找树的删除,分三种情况进行处理: 1. p为叶子节点,直接删除该节点,再修改其父节点的

二叉查找树-查找的函数

二叉查找树的定义是: 树中每一个根节点的左子树上的数据全部都小于根节点的数据,右子树都大于根节点的数据. 例图(XMind): 现在没看到二叉查找树如何动态构建,因此先手动构造了上述树,先把递归查找的函数贴出来 SearchTree.cpp 1 #include "iostream" 2 #include "stdlib.h" 3 4 #define log(s); std::cout<<s; 5 6 typedef struct _btree_ 7 {

[javaSE] 数据结构(二叉查找树-插入节点)

二叉查找树(Binary Search Tree),又被称为二叉搜索树,它是特殊的二叉树,左子树的节点值小于右子树的节点值. 定义二叉查找树 定义二叉树BSTree,它保护了二叉树的根节点BSTNode类型的mRoot,定义内部类BSTNode 包含二叉树的几个基本信息: key——关键字用来对二叉查找树的节点进行排序 left——指向当前节点的左孩子 right——指向当前节点的右孩子 parent——指向当前节点的父节点 定义插入节点方法insert(T key),参数:T key要插入的对

WordPress代码插入文章函数:wp_insert_post

[描述]该函数可在数据库中插入文章(及页面).它可以进行处理变量,检查操作,填充日期/时间等缺失变量等工作.该函数以对象作为变量,返回已创建文章的编号(出错时返回0). [使用方法] <?php wp_insert_post( $post, $wp_error ); ?> [参数] $post(array) (必需) 一个文章对象. 与数据库wp_posts表中的字段一一对应 默认: 无重要: 如果设置$post[‘ID’]的值,将不会创建 这个ID的文章. 设置这个值将会更新这个ID的文章.

Spark-Cassandra-Connector 插入数据函数saveToCassandra

在spark-shell中将数据保存到cassandra: var data = normalfill.map(line => line.split("\u0005")) data.map( line => (line(0), line(1), line(2))) ).saveToCassandra( "cui", "oper_ios", SomeColumns("user_no", "cust_id&q

Glide.with(Activity) 也是让 Activity 创建出一个 Fragment ,在 Fragment 的各个生命周期方法内插入回调函数后,执行代码来实现的

SupportActivity.java(support库)------------------------------ @Override @SuppressWarnings("RestrictedApi") protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ReportFragment.injectIfNeededIn(this); }

在二叉查找树中插入节点

给定一棵二叉查找树和一个新的树节点,将节点插入到树中. 你需要保证该树仍然是一棵二叉查找树. 给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2 2 / \ / 1 4 --> 1 4 / / \ 3 3 6 二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树. 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值: (2)若右子树不空

浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点. 二叉查找树具有很高的灵活性,对其优化可以生成平衡二叉树,红黑树等高效的查找和插入数据结构,后文会一一介绍. 一 定义 二叉查找树(B