二叉查找树的构造

使二叉树成为二叉查找数的性质是:对于树的每个节点x,它的左子树的所有值小于x项的值,它的右子树的所有值大于x项的值。

怎样构造一棵二叉查找树呢?

首先设置树的数据结构

struct BinaryNode
{
int element;
BinaryNode *left;
BinaryNode *rigth;
BinaryNode(const int &theElement,BinaryNode *lt,BinaryNode *rt)
:element(theElement),left(lt),rigth(rt){}
};

然后用insert函数构造二叉树

void insert(const int &x,BinaryNode *&t)
{
if(t==NULL)
{
t=new BinaryNode(x,NULL,NULL);
}
else if(x<t->element)
{
insert(x,t->left);
}
else if(x>t->element)
{
insert(x,t->rigth);
}
else
;
}

实现例子:

int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
BinaryNode *root=NULL;
for(int i=0;i<10;i++)
{
insert(a[i],root);
}
return 0;

}

时间: 2024-08-15 00:58:33

二叉查找树的构造的相关文章

数据结构基础温故-4.树与二叉树(中)

在上一篇中,我们了解了树的基本概念以及二叉树的基本特点和代码实现,还用递归的方式对二叉树的三种遍历算法进行了代码实现.但是,由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多.而且,如果递归深度太大,可能系统撑不住.因此,我们使用非递归(这里主要是循环,循环方法比递归方法快, 因为循环避免了一系列函数调用和返回中所涉及到的参数传递和返回值的额外开销)来重新实现一遍各种遍历算法,再对二叉树的另外一种特殊的遍历—层次遍历进行实现,最后再了解一下特殊的二叉树—二叉查找树. 一.递归与循环的区别及

leetcode --binary tree

1. 求深度: recursive 遍历左右子树,递归跳出时每次加一. int maxDepth(node * root) { if(roor==NULL) return 0; int leftdepth=maxDepth(root->leftchild); int rightdepth=maxDepth(root->rightchild); if(leftdepth>=rightdepth) return leftdepth+1; else return rightdepth+1; }

由后序遍历结果构造二叉查找树

二叉查找树通俗说就是左孩子比父亲小,右孩子比父亲大.构造这么一个树,树嘛,递归即可. 例如一棵树后序遍历是这样(下图的树):2 9 8 16 15 10 25 38 42 45 30 20.最后的20肯定是树根,这里要抓住一个规律:20是树根,那么2 9 8 16 15 10都是左子树,25 38 42 45 30在右子树,因为左边都小于根.右边都大于根嘛.然后递归即可. 下面是树的样子和代码和src.txt(后序遍历的结果)以及运行结果: 1 #include <iostream> 2 #i

根据有序链表构造平衡的二叉查找树

leetcode地址: https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/description/ 难度:中等 描述: Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. For this problem, a height-balanc

平衡树初阶——AVL平衡二叉查找树+三大平衡树(Treap + Splay + SBT)模板【超详解】

平衡树初阶——AVL平衡二叉查找树 一.什么是二叉树 1. 什么是树. 计算机科学里面的树本质是一个树状图.树首先是一个有向无环图,由根节点指向子结点.但是不严格的说,我们也研究无向树.所谓无向树就是将有向树的所有边看成无向边形成的树状图.树是一种递归的数据结构,所以我们研究树也是按照递归的方式去研究的. 2.什么是二叉树. 我们给出二叉树的递归定义如下: (1)空树是一个二叉树. (2)单个节点是一个二叉树. (3)如果一棵树中,以它的左右子节点为根形成的子树都是二叉树,那么这棵树本身也是二叉

图解数据结构(7)——二叉查找树及平衡二叉查找树(一共14篇)

这篇将是最有难度和挑战性的一篇,做好心理准备!十.二叉查找树(BST)前一篇介绍了树,却未介绍树有什么用.但就算我不说,你也能想得到,看我们Windows的目录结构,其实就是树形的,一个典型的分类应用.当然除了分类,树还有别的作用,我们可以利用树建立一个非常便于查找取值又非常便于插入删除的数据结构,这就是马上要提到的二叉查找树(Binary Search Tree),这种二叉树有个特点:对任意节点而言,左子(当然了,存在的话)的值总是小于本身,而右子(存在的话)的值总是大于本身. 这种特性使得我

二叉树学习笔记之二叉查找树(BSTree)

二叉查找树即搜索二叉树,或者二叉排序树(BSTree),学习回顾一下有关的知识. >>关于二叉查找树 二叉查找树(Binary Search Tree)是指一棵空树或者具有下列性质的二叉树:1. 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值:2. 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值:3. 任意节点的左.右子树也分别为二叉查找树.4. 没有键值相等的节点,这个特征很重要,可以帮助理解二叉排序树的很多操作.二叉查找树具有很高的灵活性,对其优化可

平衡二叉查找树

package avitree; /** * 平衡二叉查找树类 * * @param <T> */ public class AvlTree<T extends Comparable<? super T>> { public static void main(String[] args) { AvlTree<Integer> tree = new AvlTree<Integer>(); //第一组数据 测试 右左双旋转 // tree.inser

二叉查找树 C++实现(含完整代码)

一般二叉树的查找是通过遍历整棵二叉树实现,效率较低.二叉查找树是一种特殊的二叉树,可以提高查找的效率.二叉查找树又称为二叉排序树或二叉搜索树. 二叉查找树的定义 二叉排序树(Binary Search Tree)又称二叉排序树(Binary Sort Tree),或者是一颗空二叉树,或者是具有一下特性的二叉树: 若它的左子树不为空,则左子树上的所有结点的值均小于根节点的值. 若它的右子树不为空,则右子树上的所有结点的值均小于根节点的值. 它的左右子树又分别是二叉排序树. 由定义可知,二叉查找树中