美文网首页数据结构
数据结构题目57:建立一棵二叉排序树

数据结构题目57:建立一棵二叉排序树

作者: 玲儿珑 | 来源:发表于2020-05-12 22:33 被阅读0次

题目:已知K=(5, 10, 5, 20, 17, 12, 19, 2),建立一棵二叉排序树。

解题思路:建立二叉排序树的原则:
设K=(k1, k2, k3, ..., kn)为数据元素序列。从ki开始依次取序列中的元素,每取出一个数据元素ki,按下列原则建立二叉排序树的一个结点。
1.若二叉排序树为空,则ki就是二叉排序树的根结点。
2.若二叉排序树非空,则将ki与该二叉排序树的跟结点的值进行比较。若ki小于根结点的值,则将ki插入到根结点的左子树中;否则,将ki插入到根结点的右子树中。
这是一个递归的过程,因为将一个数据元素插入到根结点的左子树或者插入到根结点的右子树,同样需要按照这个原则递归进行。
根据这个原则给出相应的算法。下面给出建立二叉排序树的非递归算法(设二叉排序树采用二叉链表存储结构)

具体算法如下:
(一) 非递归算法

function insertBST(T, item) {
    let p = new Node(item, null, null), q
    if ( T==null ) {
        T = p
    } else {
        q = T
        while ( 1 ) {
            if ( item < q.data ) {
                if ( q.lchild !=null ) {
                    q = q.lchild
                } else {
                    q.lchild = p
                    break;
                }
            } else {
                if ( q.rchild != null ) {
                    q = q.rchild
                } else {
                    q.rchild = p
                    break;
                }
            }
        }
    }
    return T
}

class Node{
    constructor (data, lchild, rchild) {
        this.data = data,
        this.lchild = lchild
        this.rchild = rchild
    }
}
let K = [5, 10, 5, 20, 17, 12, 19, 2]
function sortTree(K) {
    let n = K.length, T = null, i
    if ( n > 0 ) {
        for (let i = 0; i < n; i++) {
            T = insertBST(T, K[i])
            // console.log(T)
        }
    }
    return T
}
var BST = sortTree(K)

(二)递归算法

function insertBST(T, item) {
    if ( T==null ) {
        T = new Node(item, null, null)
    } else if ( item < T.data ){
        insertBST( T.lchild, item )
    } else {
        insertBST( T.rchild, item )
    }
}

相关文章

  • 数据结构题目57:建立一棵二叉排序树

    题目:已知K=(5, 10, 5, 20, 17, 12, 19, 2),建立一棵二叉排序树。 解题思路:建立二叉...

  • 2018-06-19/20 机试准备09

    数据结构 四、二叉排序树 对二叉排序树进行中序遍历 结果必然是一个递增序列 所以通过建立二叉排序树可以对无序序列进...

  • 数据结构题目:树

    数据结构题目:树 题目:二叉排序树的构建与遍历 c++: 转码似乎有点问题,用utf-8就行了 java:

  • 排序二叉树转换为排序双向链表

    题目:输入一棵二叉排序树,将该二叉排序树转换成一个排序的带头结点的双向链表。如: 转换成双向链表4<->6<->8...

  • 二叉排序树转双向链表

    排序二叉树转换为排序双向链表 题目:输入一棵二叉排序树,将该二叉排序树转换成一个排序的带头结点的双向链表。如: 转...

  • 二叉树应用

    1 项目要求 建立一棵二叉树 前序、中序、层次非递归遍历该二叉树 判断该二叉树是否为二叉排序树 如果是二叉排序树,...

  • 2018-12-05

    今天考研的同学让我帮她看一道数据结构问题,题目是这样的: 由23、12、45、36构成的二叉排序树有几个() ,其...

  • hanoi塔和递归调用

    《数据结构》p57

  • 数据结构05-二叉排序树

    数据结构05-二叉排序树 一、二叉排序树的介绍 二叉排序树 或者是一颗空树,或者是一颗具有如下性质的树: 若左子...

  • 二叉搜索树(BST)

    构造一棵二叉排序树的目的,其实并不是为了排序,而是为了提高查找的效率。 那么什么是二叉排序树呢?二叉排序树具有以下...

网友评论

    本文标题:数据结构题目57:建立一棵二叉排序树

    本文链接:https://www.haomeiwen.com/subject/hccwnhtx.html